php - 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
如果找不到变量,则返回。
解决方案
使用 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
子句仅过滤掉行。它不会使它们相乘。但是加入正是你想要的。
推荐阅读
- node.js - 我想从定义的 Array 中选择一个随机 XPath
- angularjs - AngularJs 清理输入
- java - 使用 MapStruct 将抽象类映射到 DTO
- r - 动态创建data.frame / data.table / tibble
- c# - 如何使用 DevExpress DashboardDesigner.SelectedDataSource 填充 GridControl/DataGridView
- java - 如何在java中使用本机查询更新postgres数据集并忽略hibernate
- python - 加权二元交叉熵keras的实现
- c# - 与 Dapper .NET 的交易
- django - 自定义用户管理器中的外键
- azure - 如何将 Azure App Service Web App 连接到 Google SQL Server 数据库?