Самое простое выражение упорядоченного списка: 3,1,2,4
.Мы можем сохранить это как строку в родительской таблице;поэтому, если наша таблица photos
с внешним ключом profile_id
, мы разместим наш заказ фотографий в profiles.photo_order
.Затем мы можем рассмотреть это поле в нашем предложении order by
, используя функцию find_in_set()
.Это требует либо двух запросов, либо объединения.Я использую два запроса, но объединение более интересно, поэтому вот оно:
select photos.photo_id, photos.caption
from photos
join profiles on profiles.profile_id = photos.profile_id
where photos.profile_id = 1
order by find_in_set(photos.photo_id, profiles.photo_order);
Обратите внимание, что вы, вероятно, не захотите использовать find_in_set()
в предложении where
из-за влияния на производительность, но вВ предложении order by
имеется достаточно мало результатов, чтобы сделать это быстро.
Эту информацию легко обновить в вашей базе данных, потому что где-то в вашей системе ваш пользовательский интерфейс должен знать порядок фотографий и будетвернуться к некоторому значению по умолчанию, если в базе данных нет порядка.Таким образом, независимо от того, какой интерфейс решит, вам просто нужно отправить запрос на сервер с таким порядком, когда пользователь его изменит.