Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > объединить запросы с разными условиями


Автор: anthonyBoard 15.9.2008, 18:00
Здравствуйте!

Возникла необходимость делать такой запрос, в котором данные отбираются по нескольким значениям. Т.е. WHERE parameter=1 OR parameter=2 OR parameter=3.
И нужно сделать ограничение, чтобы строк с каждым из параметров было по 4 (4 строки где parameter=1, 4 - где parameter=2 и 4 - где parameter=3).

Простым LIMIT'ом тут не обойтись, т.к. он лимитирует по всему запросу, а разбивать такой запрос на несколько не очень хочется, потому что велика вероятность, что надо будет потом по 10-20 параметров выбирать, и 20 раз делать отдельные запросы это совсем не красиво.

Пробовал делать с помощью UNION, но в этом случае все равно нельзя задать LIMIT для каждого из параметров отдельно.

Если Вы знаете как решить эту задачу, прошу Вас помочь разобраться с этим мне.

Так же интересует вопрос, возможно ли JOIN'ы лимитировать и одновременно сортировать их отдельно от общего запроса?


Заранее премного благодарен за помощь!

Автор: Sartorius 15.9.2008, 18:02
anthonyBoard, и в чем проблема?

Автор: anthonyBoard 15.9.2008, 18:11
Прошу прощения, проблема была что нажал ctrl+enter случайно и сообщение отправилось, когда я его еще его не дописал.

Автор: skyboy 15.9.2008, 18:24
Цитата(anthonyBoard @  15.9.2008,  17:00 Найти цитируемый пост)
все равно нельзя задать LIMIT для каждого из параметров отдельно

можно. почему нельзя?

Автор: anthonyBoard 15.9.2008, 18:30
А дайте, пожалуйста, пример того как это сделать?

Так же полученные строки надо отсортировать по двум колонкам (parameters, date)

Добавлено через 1 минуту и 38 секунд
А, спасибо!
Сам понял как можно сделать. Просто достаточно в скобки заключить SELECT'ы.

А с JOIN такое возможно?

Автор: skyboy 15.9.2008, 20:08
Цитата(anthonyBoard @  15.9.2008,  17:30 Найти цитируемый пост)
А с JOIN такое возможно? 

JOIN вместо UNION? а смысл? или в смысле - UNION по результатам JOIN'a? как-то вопрос не понятен абсолютно.

Автор: anthonyBoard 16.9.2008, 10:58
Не JOIN вместо UNION, а речь вообще о другом запросе, в котором используется LEFT JOIN для объединения данных двух таблиц. И в некоторых случаях по параметру левой таблицы может соответствовать 20 строк из правой и надо эти соответствующие значения из правой таблицы отсортировать по `date` столбцу и лимитировать 4-мя записями.

Автор: skyboy 16.9.2008, 18:16
и что? разве не получается? что не работает?

Автор: anthonyBoard 19.9.2008, 23:46
Для JOIN'ов не работает почему-то.

Автор: skyboy 20.9.2008, 11:04
Цитата(skyboy @  16.9.2008,  17:16 Найти цитируемый пост)
что не работает? 

получившийся запрос, сообщение об ошибке - где они?!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)