php - Mysqli IN 获取重复结果

标签 php mysql sql mysqli

我的查询是:

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/

相关文章:

php - “计算”符合特定条件的记录数并显示数字(使用 PHP 和 MySQL)

php - 从 json 编码的字符串 php 构建 SQL 语句

mysql - Java EE/JPA 向数据库添加新表/实体的方法

mysql - 如何在hive数据库中查找空表

mysql - 我可以在 where 子句中使用别名吗?

php - 使用 PHP/PDO 存储数据的安全性

PHP PDO 从记录编辑表单中的大表中填充下拉列表 - 从数据库中提取结果

PHP 在 30 分钟后插入到 MySQL

sql - 我可以在 Postgres 中使用来自其他表的聚合数据更新表中的多个字段吗?

mysql - 如何使用字符串的前缀(即第一个空格之前的部分)进行分组?