小编典典

MySQL查询返回带有in和find_int_set的重复条目

sql

我有一个mysql查询,显示用户上次查看的文档。某种历史记录视图,我想在“历史记录”选项卡中显示它,但是我无法使其正常工作。

历史记录保存在另一台服务器上,因此我要获取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中手动添加缺少的内容?

提前致谢!


阅读 218

收藏
2021-04-28

共1个答案

小编典典

IN无需使用子句,您需要对id值进行联接。IE:

  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

2021-04-28