首页 > 解决方案 > MYSQL & PHP - 每个 IN 变量返回 1 个结果,即使变量不是唯一的

问题描述

我正在查询数据库以使用 PHP 中的以下准备语句返回user_name行, by user_id

$stmt = $conn->prepare("SELECT user_name FROM users WHERE user_id IN (?,?,?,?,?,?,?,?,?,?)");

如果IN语句中的每个变量都是唯一的并且在数据库中,我会收到user_name每个变量的 1 个结果。但是,如果我的IN语句中的变量不是唯一的(user_id 中有 2 个是foo),我目前没有得到user_name每个IN变量的结果。

如何修改我准备好的语句,这样即使我的IN语句中的所有变量都相同,每个变量我仍然会收到 1 行,null如果找不到变量,则返回。

标签: phpmysqlsqlprepared-statement

解决方案


使用 aleft 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子句仅过滤掉行。它不会使它们相乘。但是加入正是你想要的。


推荐阅读