0

私は2つのテーブルを持っています:

table_A: ID | ファイル

table_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

このクエリを改善するにはどうすればよいですか? バージョン フィールドが原因で、行がまったく同じではないため、個別の機能はありません (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条項のようです。最新のバージョンに最新の publish_time がある場合、これは正しい順序 (したがって選択) になります。

于 2013-06-14T15:41:10.733 に答える