mysql (および php) でバージョン管理を実装しました。
次のようになります。
categories
-------------
| id | name |
|----|-------
| 1 | a
| 2 | b
| 3 | c
| 4 | d
-------------
revisions
----------------------
| id | cid | current |
|----|-----|----------
| 1 | 1 | 1 |
| 2 | 1 | NULL |
| 3 | 2 | NULL |
| 4 | 3 | 1 |
| 5 | 4 | NULL |
| 6 | 4 | 1 |
----------------------
各カテゴリには複数のリビジョンが割り当てられています。"current" が 1 に設定されている場合、リビジョンが設定されます (カテゴリごとに 1 つのリビジョンのみが 1 になり、その他はすべて NULL になります)。私が今欲しいのは、新しいリビジョンを持つすべてのカテゴリを取得することです(リビジョンが送信されると、すぐに最新に設定されないことに注意してください。これは、モデレーターなどによって行われます)。私の問題は、現在のIS NULLのリビジョンが1つしかない各カテゴリも取得するようになりました
したがって、期待される結果は次のようになります。
-------------
| category.id
|------------
| 1
| 2
-------------
ではごきげんよう
編集://
私の現在の解決策は次のとおりです。
SELECT categories.* FROM categories
JOIN revisions as t1 ON
(
t1.cid = categories.id
t1.current IS NULL
)
JOIN revisions as t2 ON
(
t2.id != t1.id
t2.current IS NOT NULL
t2.cid = categories.id
)
WHERE t1.id > t2.id