Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос / 13 сообщений из 13, страница 1 из 1
16.09.2015, 11:37:31
    #39052594
PooH63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Всем добрый день.

Не знаю даже как написать в поиске что мне надо, поэтому решил создать тему.
Собственно вот:

Есть таблица с отзывами(упрощённо)
id;user_id;raiting;date_add;ord

У каждого отзыва есть рейтинг (0-5).
На сайте постраничный вывод отзывов (по 5 на страницу, но не критично).

Так вот собственно вопрос: как вывести на одну страницу скажем 3 хороших отзыва и 2 плохих (с сортировкой по дате).
Если не хватает для добора(количество которое вы водится на страницу) хорошего или плохого брать из противоположной группы.

Никак не могу составить такой запрос. В таблице есть ещё поле ord которое заполняется следующим образом
Для положительных отзывов - нечётные числа (в порядке возрастания ... 1 3 4 5 ...)
Для отрицательных отзывов - чётные числа (в порядке возрастания ... 2 4 6 8 ...)

На данный момент проблема в том что положительных отзывов гораздо больше, и если брать сортировкой по этому полю, то под требование не подходит выборка.

Помогите составить запрос или направьте в нужную сторону для размышлений.
Заранее спасибо.
...
Рейтинг: 0 / 0
16.09.2015, 11:51:20
    #39052603
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
PooH633 хороших отзыва и 2 плохихА как отличать одно от другого?

А вообще выбираете отдельно те и другие, результат объединяете через UNION ALL или на клиенте.
...
Рейтинг: 0 / 0
16.09.2015, 12:00:22
    #39052610
PooH63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Отличать по полю raiting(хорошие >= 4, плохие < 4).
Через юнион думал сделать (выбрать 3+ и 2-), но допустим ситуацию когда кончились либо хорошие либо плохие, тогда на странице будет не добор(всего выберется 4 или 3 отзыва). Придётся либо доп запросом добирать нужных отзывов либо некрасиво будет выводиться. С доп запросом будет проблема при пагинации, возможно всё поломается или будет повторение отзыва на следующей странице
...
Рейтинг: 0 / 0
16.09.2015, 12:02:29
    #39052612
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
PooH63Через юнион думал сделать (выбрать 3+ и 2-), но допустим ситуацию когда кончились либо хорошие либо плохие, тогда на странице будет не доборВ каждой из частей выбирать по 5 отзывов, а по результату объединения ограничивать еще раз.
...
Рейтинг: 0 / 0
16.09.2015, 12:11:09
    #39052620
PooH63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Но тогда если и тех и тех отзывов наберётся по 5, то в итоге отобразятся только 5 первых (т.е. 5 положительных или 5 отрицательных смотря какой первый запрос в UNION)

Если я правильно понял запрос вида

(
...
LIMIT 5
)
UNION ALL
(
...
LIMIT 5
)

LIMIT 5
...
Рейтинг: 0 / 0
16.09.2015, 12:12:25
    #39052621
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
PooH63Но тогда если и тех и тех отзывов наберётся по 5, то в итоге отобразятся только 5 первыхДобавьте сортировку, которая их равномерно перемешает
...
Рейтинг: 0 / 0
16.09.2015, 12:13:23
    #39052622
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Отсортируй в нужном порядке (rating desc, ord asc) и пронумеруй. Когда известно общее количество записей, несложно посчитать, какие номера записей надо брать для заданного номера страницы.
...
Рейтинг: 0 / 0
16.09.2015, 12:16:04
    #39052625
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Другой вариант - выбирать нужное количество записей из независимых подзапросов, каждый со своим ограничением, и UNION.

В любом случае единственная проблема - это последняя страница, "центральные" фреймы скорее всего (80%) будут накладываться.
...
Рейтинг: 0 / 0
16.09.2015, 12:22:55
    #39052631
PooH63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Спасибо за советы.
Сейчас подумываю об варианте через UNION, но перед этим выбирать сколько записей каждого типа отзывов ещё доступно для выбора (относительно номера страница), и если где-то не хватает - регулировать LIMIT в каждом подзапросе.
...
Рейтинг: 0 / 0
16.09.2015, 12:23:51
    #39052632
PooH63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Так избавлюсь от недобора, ну а последняя страница с ней уже ничего не сделать, сколько осталось столько и выводим :)
...
Рейтинг: 0 / 0
16.09.2015, 12:34:46
    #39052640
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
PooH63, http://sqlfiddle.com/#!9/b266a/1

Но на стороне клиента это сделать значительно проще (выбирая по 5 строк каждого типа)
...
Рейтинг: 0 / 0
16.09.2015, 12:39:08
    #39052646
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
С учетом "плохой отзыв" - с рейтингом < 4 - http://sqlfiddle.com/#!9/b266a/2
...
Рейтинг: 0 / 0
16.09.2015, 14:01:44
    #39052806
PooH63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Cygapb-007, спасибо!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]