Итак, у меня довольно простой веб-сайт на основе PHP, который использует MySQL для некоторых своих данных.
В настоящее время мне нужно отсортировать строку результатов MySQL таким образом, чтобы это зависело от необязательных полей из других таблиц, и мне интересно, легко ли это достижимо.
Вот как выглядит база данных(sorta):
ОСНОВНОЙ СТОЛ , называемый «Главный»
| id | timestamp | starttime |
| 1 | 2010-06-10 | 2010-08-15 |
| 2 | 2011-01-15 | 2011-03-12 |
| 3 | 2011-01-27 | 0000-00-00 |
ПРИКЛЮЧЕННЫЙ СТОЛ , называемый «Приложения»
| aid | timestamp | id |
| 1 | 2012-09-04 | 3 |
| 2 | 2017-04-01 | 3 |
ТАБЛИЦА ПЕРЕСМОТРОВ , называемая «Ревизии»
| rid | timestamp | id |
| 1 | 2014-10-10 | 1 |
| 2 | 2018-12-25 | 2 |
Основная таблица - это то, что в основном необходимо, вложения и ревизии не важны для упорядоченного списка, который я хочу предоставить.
Теперь я хочу иметь возможность отсортировать это по «дате последнего изменения», и это проблема, потому что есть 4 значения, которые можно отсортировать по:
- Main.starttime (thisобновляется при определенных действиях пользователя)
- Attachments.timestamp (пользователи могут добавлять вложения в любое время)
- Revisions.timestamp (пользователь может редактировать свою главную строку, дельта записывается в Revisions как новаястрока)
ИЛИ (если ни один извышеуказанные поля существуют или равны нулю)
Main.timestamp (по умолчанию DateTime строка была создана с использованием NOW ())
Я пытался использовать GREATEST () в моем предложении ORDER BY, и это работает, но только дляMain.timestamp и Main.starttime - не для двух других значений, которые мне нужно учитывать.
Это моя текущая команда SQL:
SELECT Main.*, User.lastname, User.surname, User.title
FROM Main, User
WHERE User.uid = Main.uid AND Main.state != 0
ORDER BY $orderby LIMIT :limit OFFSET :offset
Моя переменная $ orderby обрабатываетсячерез PHP, поэтому он очищен, но в основном может быть что-то вроде:
$orderby = "Main.timestamp DESC";
или с помощью GREATEST ():
$orderby = "GREATEST(Main.timestamp, Main.starttime) DESC";
Основная проблема, с которой я сталкиваюсь, заключается в том, что не каждая строка "Main"имеет соответствующую строку в «Вложениях» или «Ревизиях», но у некоторых есть несколько.
Приведенный выше пример должен быть отсортирован как
2 > 3 > 1
, если сортировка будет работать.
Я надеюсь, что вы, ребята, можете помочь!