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

时间:2010-08-29 22:02:28

标签: sql mysql

我有一个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中手动添加缺少的?

提前致谢!

1 个答案:

答案 0 :(得分: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