Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Многотабличный запрос с различной сортировкой и без дублирования
 
 автор: Myas   (21.06.2007 в 15:43)   письмо автору
 
 

Люди,
Задача такая:
таблица 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, сижу уже весь день, ничего не могу придумать!
Помогите, пожалуйста, как сделать нужный запрос.

Спасибо заранее!

   
 
 автор: Myas   (21.06.2007 в 20:02)   письмо автору
 
   для: Myas   (21.06.2007 в 15:43)
 

Помогите пожалуйста!
Я вообще запарился!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования