sql - Mysql 查询返回带有 in 和 find_int_set 的重复条目

标签 sql mysql

我有一个 mysql 查询,显示用户最后查看的文档。某种历史 View ,我想在历史选项卡中显示它,但我无法让它工作。

历史保存在另一台服务器上,所以我得到了一个 ID 列表,我必须从文档数据库中获取文档的信息。我希望它显示历史记录中的重复条目(目前不起作用)

我已经尝试了多种方法来使其正常工作,但我得到的只是获取最后 25 个在 id 字段上使用 DISTINCT 选择的文档,但我也想获取重复项。

这是我正在使用的查询(填充了示例数据)

SELECT 
    stuff_from_table
FROM 
    a_secret_table
WHERE 
    `id`
IN ( 6176, 6176, 6176, 3091, 3454, 5927, 5929, 5938, 1975, 177, 6123, 5943, 4325, 4326, 4327, 6176, 4327, 1990, 3400, 2650, 2649, 2649, 6176, 4297, 6145 ) 
ORDER BY FIND_IN_SET( id, '6176, 6176, 6176, 3091, 3454, 5927, 5929, 5938, 1975, 177, 6123, 5943, 4325, 4326, 4327, 6176, 4327, 1990, 3400, 2650, 2649, 2649, 6176, 4297, 6145') 
LIMIT 0 , 25

此代码有效,但不会返回任何重复项。它只会返回 17 个结果,因为它忽略了重复项。

任何人都知道如何让这个查询也返回重复项?还是我必须在 php 中手动添加缺少的?

提前致谢!

最佳答案

而不是使用 IN 子句,您需要加入 id 值。即:

  SELECT t.stuff
    FROM YOUR_TABLE t
    JOIN (SELECT 6176 AS tid,
          UNION ALL
          SELECT 6176
          UNION ALL
          SELECT 6176
          UNION ALL
          SELECT 3091) x ON x.tid = t.id
ORDER BY FIND_IN_SET(t.id, '6176, 6176, 6176, 3091') 
   LIMIT 25

您需要将该逗号分隔的列表拆分为具有单列的表格 - 请参阅:http://forge.mysql.com/tools/tool.php?id=4

关于sql - Mysql 查询返回带有 in 和 find_int_set 的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3596790/

相关文章:

php - 如何在 'WHERE' sql查询中使用 'JOIN'

php数据库问题

mysql - 添加 DATE 和 TIME 字段以获取 MySQL 中的 DATETIME 字段

sql - Oracle SQL - 计算两个日期之间的连续周数

mysql - 如何定义 View 的算法

php - mysqli 不能与 apache 一起使用,但可以在 PHP 控制台上使用

mysql - 显示日期之间的数据并循环遍历年份

mysql - 更新行中具有不同值的列

sql - 查询以查找今天和昨天的数据以及伪列之间的差异

java - Hibernate Criteria Left 连接两个表