我有两张桌子:
TABLE_A: id |文件
表-B: id | docs_id |批准|公众| publish_time |版本
现在,table_B的docs_id是table_A的id。
我想获取最后20个条目的id和文件(按publish_time排序降序)。 我的问题是,table_B中有几行,其中唯一不同的是(除了publish_time)版本。所以我只想获得最新版本。
SELECT d.* FROM docs d LEFT JOIN doc_versions dv ON d.id = dv.docs_id WHERE dv.approved='1' AND dv.public='1' ORDER BY publish_time DESC LIMIT 0,20
我怎么能改进这个查询,所以我不会重复?区别不起作用,因为行不完全相同,因为版本字段(因为我不计算我的publish_time时间戳中的秒数,有可能有一行,其中publish_time等于另一行但版本不同。 。)
答案 0 :(得分:1)
好吧,你的查询没有从版本中返回任何内容,所以你可以这样做:
SELECT d.*
FROM docs d LEFT JOIN
doc_versions dv
ON d.id = dv.docs_id
WHERE dv.approved='1' AND dv.public='1'
group by d.doc_id
ORDER BY max(publish_time) DESC
LIMIT 0,20
唯一的问题似乎是order by
条款。如果最新版本具有最新的publish_time,那么这将具有正确的排序(因此选择)。