| Люди,
Задача такая:
таблица tab1 (поля OrgID,Type);
таблица tab2 (поля ID, OrgID);
Нужно сделать запрос (по-видимому объединенный), который бы выдавал OrgID из обоих таблиц, отсортированный следующим образом:
- сначала по tab1.Type от меньшего к большему;
- потом по количеству записей одного OrgID в tab2 от большего к меньшему.
При этом в результате записи не должны дублироваться.
Практическое применение, чтобы было понятно – это вывод списка организаций, которые размещают рекламу. При этом в таблице tab1 размещается платная реклама (Type – тип рекламы), а в таблице tab2 – список бесплатных строчных объявлений. Логично, что при выводе списка организаций хочется выше показать те организации, которые дают платную рекламу, а затем те, которые дают строчную (при этом тот, у кого больше строчных объявлений, должен находиться выше). Любая организация может давать как платную рекламу, так и строчные объявления.
Запрос типа:
(SELECT OrgID,1000 FROM tab1 ORDER BY Type) UNION (SELECT OrgID,COUNT(*) FROM tab2 GROUP BY OrgID) ORDER BY 2 DESC (где 1000 в первой части запроса – это просто условно большая величина, которая гарантировано превысит COUNT(*) из второй части запроса, т.к. наличие OrgID в tab1 имеет приоритет при сортировке)
работает, НО дублирует записи, если одна организация засветилась как tab1, так и в tab2.
А конструкции типа:
(SELECT OrgID FROM tab1 ORDER BY Type) UNION (SELECT OrgID FROM tab2 GROUP BY OrgID ORDER BY COUNT(OrgID) DESC)
выдают ошибку.
Прочитал весь справочник по MySQL, сижу уже весь день, ничего не могу придумать!
Помогите, пожалуйста, как сделать нужный запрос.
Спасибо заранее! | |