我的查询是:
SELECT * FROM `table` WHERE `id` IN (1,2,1,3,4,5,2);
我需要返回重复的结果。
这里我的结果需要返回 id = 1 或 id = 2 行两次,其他的。
最佳答案
您需要使用UNION ALL
,并对每个要复制的id
进行单独的查询。
SELECT * FROM `table` WHERE `id` IN (1,2,3,4,5)
UNION ALL
SELECT * FROM `table` WHERE `id` IN (1, 2)
另一种方法是与包含重复项的合成表进行联接:
SELECT t1.*
FROM `table` AS t1
JOIN (SELECT 1 AS id
UNION ALL
SELECT 2
UNION ALL
SELECT 1
UNION ALL
SELECT 3
UNION ALL
SELECT 4
UNION ALL
SELECT 5
UNION ALL
SELECT 2) AS t2
ON t1.id = t2.id
另一种方法是在处理结果时在 PHP 中复制行。所以你可以有一个像这样的数组:
$ids = array(1, 2, 1, 3, 4, 5, 2);
$id_counts = array_count_values($ids);
$all_results = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$all_results = array_merge($all_results, array_fill(0, $id_counts[$row['id']], $row));
}
关于php - Mysqli IN 获取重复结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44579317/