php - MYSQL 和 PHP - 每个 IN 变量返回 1 个结果,即使变量不是唯一的

标签 php mysql sql prepared-statement

我正在查询数据库以返回 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/

相关文章:

php 反序列化返回 false

php - 使用 Zend 框架调用多个存储过程

mysql - 索引是否与 View 一起使用?

PHP Twitter API - 如何拉入多个用户的推文?

php - codeigniter 路由任何或 num 不工作

php - AJAX即时搜索修改

java - Hive 描述分区以显示分区 url

javascript - 提交时隐藏表单

php - 使用 MySQL 和 PHP 的数据透视报告

mysql - MySQL 数据库结构的良好实践