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 子句只过滤掉行。它不会使它们相乘。但是连接完全符合您的要求。