Вот пользовательский случай, который у меня есть:
Существуют агентства, которые могут иметь одно или несколько мест.
Они могут купить подписку для каждого местоположения и для рейтинга (рейтинг - это целое число от 1 до 5). Таким образом, агентство может иметь несколько подписок (до одной для каждого местоположения)
Вот таблицы:
agency: id, name
location: id, name
agency_location: agency_id, location_id
subscription: id, agency_id, location_id, ranking
Пока все хорошо, довольно просто.
Затем я хочу отобразить все агентства для данного местоположения (скажем, location_id = 9) и упорядочить их по рейтингу для этого местоположения (зная, что у некоторых агентств не будет подписки - то есть без рейтинга, и они должны прийти после тех, у кого есть подписка).
Я пробовал всевозможные операторы SQL, но никак не могу понять ...
Например, это:
SELECT * FROM {agencies}
LEFT JOIN subscription ON subscription.agency_id=agency.id
ORDER BY (subscription.ranking IS NULL) ASC, subscription ranking ASC
Вернет все агентства, причем те, у которых подписка вверху, упорядочены по рейтингу.
Но,
1) возвращает дубликаты значений, если агентство имеет несколько подписок, и
2) не учитывается местоположение
Любые подсказки были бы очень благодарны, большое спасибо!