私はこのような(2つの)テーブルと2つのテーブルを持っています。MySQL:特定の順序で各グループの最初を表示します。
fields
表
id name
1 Field One
2 Field Two
content
表
id field_id status content
1 1 draft xxx
2 1 published xxx
3 2 published xxx
だけキャッチーな事は、フィールドに関連するコンテンツは、各フィールドのための独立である「ドラフト」のシステムを持っていることです。
私はすべてのフィールドのドラフトバージョンを取得するので、ドラフトバージョンを持たないフィールド以外のすべてのドラフトを持っていなければなりません。
(もっと多くの州がありますが、私はそれを単純に保つために2つだけ使用しています)。したがって、サンプル表から検索するとき。私が欲しいものを達成するであろう何かが私が使用しているMySQLのバージョン(5.7.12)がないことだけの問題では、この
SELECT * FROM contents c1 WHERE id IN (
SELECT id FROM contents c
WHERE (c.status = 'draft' OR c.status = 'published')
AND c.field_id = c1.field_id
ORDER BY FIELD(status, 'draft', 'published') LIMIT 1
);
ある
id field_id status content
1 1 draft xxx
3 2 published xxx
:結果はこのようなものでなければなりませんは、IN
の制限をサポートしているようです。
のMySQLのこのバージョンはまだ
field_idごとに最新の下書き(存在しない場合は公開済み)を取得しますか? – GurV
これは正しいGurVです –