MYSQL & PHP - Return 每个 IN 变量 1 个结果,即使变量不是唯一的
MYSQL & PHP - Return 1 result per IN variable, even if variables are not unique
我正在 return user_name
行查询数据库,user_id
,在 PHP 中使用以下准备好的语句:
$stmt = $conn->prepare("SELECT user_name FROM users WHERE user_id IN (?,?,?,?,?,?,?,?,?,?)");
如果 IN
语句中的每个变量在数据库中都是唯一的,我会收到每个变量的 1 个 user_name
结果。 但是,如果我的IN
语句中的变量不是唯一的(user_id中的2个是foo
),我目前没有得到每个 IN
变量的 user_name
结果。
如何修改准备好的语句,这样即使我的 IN
语句中的所有变量都相同,我仍然会收到每个变量 1 行,其中 null
是 returned 如果没有找到变量。
改用left join
:
SELECT u.user_name
FROM (SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id
) uu LEFT JOIN
users u
USING (user_id);
A WHERE
子句只过滤掉行。它不会使它们相乘。但是连接完全符合您的要求。
我正在 return user_name
行查询数据库,user_id
,在 PHP 中使用以下准备好的语句:
$stmt = $conn->prepare("SELECT user_name FROM users WHERE user_id IN (?,?,?,?,?,?,?,?,?,?)");
如果 IN
语句中的每个变量在数据库中都是唯一的,我会收到每个变量的 1 个 user_name
结果。 但是,如果我的IN
语句中的变量不是唯一的(user_id中的2个是foo
),我目前没有得到每个 IN
变量的 user_name
结果。
如何修改准备好的语句,这样即使我的 IN
语句中的所有变量都相同,我仍然会收到每个变量 1 行,其中 null
是 returned 如果没有找到变量。
改用left join
:
SELECT u.user_name
FROM (SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id UNION ALL
SELECT ? as user_id
) uu LEFT JOIN
users u
USING (user_id);
A WHERE
子句只过滤掉行。它不会使它们相乘。但是连接完全符合您的要求。