Запрос MySQL для пересмотра страницы

Хорошо, у меня есть таблица со следующими столбцами

id | page_id | версия | gold_master

поэтому будет несколько page_id, но только один из них будет gold_master. Однако некоторые строки будут иметь более высокий номер версии, чем gold_master, но не будут мастером золота.

Как я могу выбрать все строки с более высокой версией, чем gold_master, но не BE gold_master.

Пока у меня есть часть "не быть золотом" от другого, это меня озадачивает!

2 ответа

Вы имеете в виду это

SELECT * FROM your_table where version > (select version from your_table where gold_master=1)


Лично у меня было бы две таблицы: одна для pages и одна для page_revisions которая фактически содержит контент.

В таблице ваших pages будет указан первичный идентификатор, а также текущий идентификатор ревизии. В таблице page_revisions будет содержаться заголовок страницы, содержимое и любые другие данные, которые вы хотите сохранить для страницы. Эта таблица будет иметь внешний ключ на page_id, а также page_id timestamp чтобы вы могли видеть, когда были созданы ревизии, и page_id их как таковые. Эта таблица также будет иметь свой первичный ключ.

Поскольку таблица page_revisions имеет свой собственный первичный идентификатор, вы можете использовать это в своей таблице pages как revision_id. Таким образом, последняя версия не может быть текущей версией, так как вы можете установить revision_id для более ранней версии.

Надеюсь, это имеет смысл. Дайте мне знать, если это не так.

EDIT: ваш запрос будет выглядеть примерно так:

SELECT p.id, r.title, r.content, r.created
FROM pages p
LEFT JOIN page_revisions r
ON p.revision_id = r.id
WHERE p.id = 1
LIMIT 1

licensed under cc by-sa 3.0 with attribution.