0

我有两张桌子:

表_A: ID | 文件

表_B: ID | docs_id | 批准| 公共 | 发布时间 | 版本

现在,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

我怎样才能改进这个查询,所以我不会得到重复?Distinct 不起作用,因为行不完全相同,因为版本字段(因为我没有在我的 publish_time 时间戳中计算秒数,所以可能有一行 publish_time 等于另一行但版本不同。 .)

4

1 回答 1

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条款。如果最新版本具有最新的发布时间,那么这将具有正确的顺序(并因此具有选择)。

于 2013-06-14T15:41:10.733 回答