我有一个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中手动添加缺少的?
提前致谢!
答案 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