我正在查询数据库以返回 user_name
行,由 user_id
, 在 PHP 中使用以下准备好的语句:
$stmt = $conn->prepare("SELECT user_name FROM users WHERE user_id IN (?,?,?,?,?,?,?,?,?,?)");
如果 IN
中的每个变量语句是唯一的,在数据库中,我收到 1 user_name
每个变量的结果。 但是,如果我的IN
中的变量语句不是唯一的(其中 2 个 user_id 是 foo
),我目前没有得到 user_name
每个 IN
的结果变量。
如何修改我的准备语句,这样即使我的所有变量都在我的 IN
中语句是一样的,我仍然会收到每个变量 1 行,null
如果找不到变量,则返回。
最佳答案
改用左连接
:
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
子句只过滤掉行。它不会使它们相乘。但是连接完全符合您的要求。
关于php - MYSQL 和 PHP - 每个 IN 变量返回 1 个结果,即使变量不是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52086298/