|
|
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. Не знаю даже как написать в поиске что мне надо, поэтому решил создать тему. Собственно вот: Есть таблица с отзывами(упрощённо) id;user_id;raiting;date_add;ord У каждого отзыва есть рейтинг (0-5). На сайте постраничный вывод отзывов (по 5 на страницу, но не критично). Так вот собственно вопрос: как вывести на одну страницу скажем 3 хороших отзыва и 2 плохих (с сортировкой по дате). Если не хватает для добора(количество которое вы водится на страницу) хорошего или плохого брать из противоположной группы. Никак не могу составить такой запрос. В таблице есть ещё поле ord которое заполняется следующим образом Для положительных отзывов - нечётные числа (в порядке возрастания ... 1 3 4 5 ...) Для отрицательных отзывов - чётные числа (в порядке возрастания ... 2 4 6 8 ...) На данный момент проблема в том что положительных отзывов гораздо больше, и если брать сортировкой по этому полю, то под требование не подходит выборка. Помогите составить запрос или направьте в нужную сторону для размышлений. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 11:37:31 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
PooH633 хороших отзыва и 2 плохихА как отличать одно от другого? А вообще выбираете отдельно те и другие, результат объединяете через UNION ALL или на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 11:51:20 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Отличать по полю raiting(хорошие >= 4, плохие < 4). Через юнион думал сделать (выбрать 3+ и 2-), но допустим ситуацию когда кончились либо хорошие либо плохие, тогда на странице будет не добор(всего выберется 4 или 3 отзыва). Придётся либо доп запросом добирать нужных отзывов либо некрасиво будет выводиться. С доп запросом будет проблема при пагинации, возможно всё поломается или будет повторение отзыва на следующей странице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:00:22 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
PooH63Через юнион думал сделать (выбрать 3+ и 2-), но допустим ситуацию когда кончились либо хорошие либо плохие, тогда на странице будет не доборВ каждой из частей выбирать по 5 отзывов, а по результату объединения ограничивать еще раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:02:29 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Но тогда если и тех и тех отзывов наберётся по 5, то в итоге отобразятся только 5 первых (т.е. 5 положительных или 5 отрицательных смотря какой первый запрос в UNION) Если я правильно понял запрос вида ( ... LIMIT 5 ) UNION ALL ( ... LIMIT 5 ) LIMIT 5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:11:09 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
PooH63Но тогда если и тех и тех отзывов наберётся по 5, то в итоге отобразятся только 5 первыхДобавьте сортировку, которая их равномерно перемешает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:12:25 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Отсортируй в нужном порядке (rating desc, ord asc) и пронумеруй. Когда известно общее количество записей, несложно посчитать, какие номера записей надо брать для заданного номера страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:13:23 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Другой вариант - выбирать нужное количество записей из независимых подзапросов, каждый со своим ограничением, и UNION. В любом случае единственная проблема - это последняя страница, "центральные" фреймы скорее всего (80%) будут накладываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:16:04 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы. Сейчас подумываю об варианте через UNION, но перед этим выбирать сколько записей каждого типа отзывов ещё доступно для выбора (относительно номера страница), и если где-то не хватает - регулировать LIMIT в каждом подзапросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:22:55 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Так избавлюсь от недобора, ну а последняя страница с ней уже ничего не сделать, сколько осталось столько и выводим :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:23:51 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
PooH63, http://sqlfiddle.com/#!9/b266a/1 Но на стороне клиента это сделать значительно проще (выбирая по 5 строк каждого типа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:34:46 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
С учетом "плохой отзыв" - с рейтингом < 4 - http://sqlfiddle.com/#!9/b266a/2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:39:08 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39052603&tid=1832714]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 321ms |

| 0 / 0 |
