我正在查询数据库以通过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
),则我目前没有得到每个变量的user_name
结果IN
变量。
如何修改准备好的语句,以使即使我的IN
语句中的所有变量都相同,我仍然会收到每个变量1行,如果返回null
,找不到变量。
答案 0 :(得分:3)
改为使用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);
WHERE
子句仅过滤出行。它不会将它们相乘。但是联接确实可以满足您的要求。