Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка из 2-х таблиц / 13 сообщений из 13, страница 1 из 1
08.03.2005, 13:04
    #32950004
Boriska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
Есть две таблицы:
1. list с полями loadcount - число, categoryid - число (ссылка на поле id таблицы category) + куча других полей.
2. category (id - число, name - строка)

Как построить такой запрос, чтобы в результирующей выборке содержались бы все поля таблицы list + category.name, а строки выводились по следующему правилу:
три записи с наибольшим значением loadcount для каждого categoryid. Т.е. если в таблице category - 5 записей,то в запросе будет 15, причем сортировка сначала по категории, а затем по значению loadcount.

Т.е. нужно сделать своего рода рейтинг самых популярных записей по категориям.
...
Рейтинг: 0 / 0
10.03.2005, 18:31
    #32954247
Doctor013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
По-моему, такой выборки в MySQL одним запросом сделать нельзя, во всяком случае, известными мне методами. Можно получить полностью, а в клиенте отсортировать
C уважением, Евгений Крюков
...
Рейтинг: 0 / 0
10.03.2005, 18:38
    #32954264
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
помнится, такая темка тут поднималась (в 2004 году) можно поискать. Там вроде 5 первых записей надо было вывести. Пора бы уже FAQ слабать по деревьям и рейтингам.
------------------
да пребудет с вами гугл!
...
Рейтинг: 0 / 0
10.03.2005, 18:42
    #32954273
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
Во-первых: возникает вопрос, а что делать если не будет для категории в принципе нужного количества (трех) записей?

Как вариант решения предлагаю во временную таблицу для каждой категории запихивать значения. А затем выбирать из временной таблицы и показывать.

А сколько вообще категорий то?

Код: plaintext
mahoune
...
Рейтинг: 0 / 0
11.03.2005, 10:17
    #32954867
Boriska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
На форуме по MS SQL подсказали такой запрос, но на mySQL он не работает

Код: plaintext
1.
2.
3.
4.
5.
6.
select c.name,l.loadcount 
from category c
join list l on (l.categoryid=c.id)
where not exists(select count(categoryid) from list 
                 where categoryid = l.categoryid 
                   and loadcount < l.loadcount having count(categoryid) >  2 )
order by c.name,l.loadcount  desc
...
Рейтинг: 0 / 0
11.03.2005, 10:40
    #32954938
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
2 Boriska

"три записи с наибольшим значением loadcount для каждого categoryid" или наибольшим И ?
...
Рейтинг: 0 / 0
11.03.2005, 10:45
    #32954955
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
И можно вообще пример структуры таблиц (с оператором create) и начальными данными (Insert операторами).
...
Рейтинг: 0 / 0
11.03.2005, 11:08
    #32955034
Boriska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
Berkut2 Boriska

"три записи с наибольшим значением loadcount для каждого categoryid" или наибольшим И ?

Да, именно с наибольшими. Получается рейтинг. Например, если взять таблицы со следующими данными:
Код: plaintext
1.
2.
3.
category
id name
1  Диваны
2  Кровати

Код: plaintext
1.
2.
3.
4.
5.
6.
list
id  name             categoryid loadcount
1  Диван складной    1           5
2  Диван обыкн.      1           6
3  Кровать №4        2           3
4  Диван волшебный   1           1
5  Диван-самолет     1           5

То в запрос должны попасть следующие записи:
Код: plaintext
1.
2.
3.
4.
id  name                categoryid loadcount categoryname
2  Диван обыкн.        1           6            Диваны
5  Диван-самолет       1           5            Диваны
1  Диван складной      1           5            Диваны
3  Кровать №4          2           3           Кровати
...
Рейтинг: 0 / 0
11.03.2005, 12:21
    #32955318
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
loadcount < l.loadcount? такое ощущение, что он выберет три записи с конца, т.е. самые непопулярные. И этот запрос не катит на мускле 4.1?
------------------
да пребудет с вами гугл!
...
Рейтинг: 0 / 0
14.03.2005, 13:38
    #32958682
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
2 Boriska

Слушай пытался по всякому сделать. В принципе решение знаю, но средствами (известными мне на данный момент) MySQL че-то никак не получается. Во всяком случае пока.

Может кто еще какую идею подкинет. А задача рейтинга вообще хорошая.
...
Рейтинг: 0 / 0
15.03.2005, 00:18
    #32959860
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
как думаете, такое угребище прокатит?
Код: plaintext
1.
2.
3.
4.
set @num= 0 , @cch= 0 , @cid= 0 ;
select *, @cch:=if(@cid=categoryid, 0 , 1 ), @num:=if(@cch, 1 ,@num+ 1 ),
@cid:=if(@cch,categoryid,@cid), if(@num< 4 ,@num,NULL) as hint
from (select * from list order by categoryid, loadcount)
where hint is not NULL;
------------------
да пребудет с вами гугл!
...
Рейтинг: 0 / 0
24.03.2005, 15:56
    #32979000
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
ну, почти пашет.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
mysql> set @num=0, @cch=0, @cid=0;
Query OK, 0 rows affected (0.01 sec)

mysql> select *, @cch:=if(@cid=pid,0,1), @num:=if(@cch,1,@num+1), @cid:=if(@cch,pid,@cid),
if(@num<4,@num,NULL) as hint from tmp3 order by pid;
+----+------+------------------------+-------------------------+-------------------------+------+
| id | pid  | @cch:=if(@cid=pid,0,1) | @num:=if(@cch,1,@num+1) | @cid:=if(@cch,pid,@cid) | hint |
+----+------+------------------------+-------------------------+-------------------------+------+
|  8 |    1 |                      1 |                       1 |                       1 |    1 |
|  9 |    1 |                      0 |                       2 |                       1 |    2 |
| 10 |    1 |                      0 |                       3 |                       1 |    3 |
| 11 |    1 |                      0 |                       4 |                       1 | NULL |
| 12 |    1 |                      0 |                       5 |                       1 | NULL |
| 13 |    2 |                      1 |                       1 |                       2 |    1 |
| 14 |    2 |                      0 |                       2 |                       2 |    2 |
| 15 |    2 |                      0 |                       3 |                       2 |    3 |
| 16 |    2 |                      0 |                       4 |                       2 | NULL |
| 17 |    2 |                      0 |                       5 |                       2 | NULL |
| 18 |    3 |                      1 |                       1 |                       3 |    1 |
| 19 |    3 |                      0 |                       2 |                       3 |    2 |
| 20 |    3 |                      0 |                       3 |                       3 |    3 |
| 21 |    3 |                      0 |                       4 |                       3 | NULL |
| 22 |    3 |                      0 |                       5 |                       3 | NULL |
| 23 |    3 |                      0 |                       6 |                       3 | NULL |
| 24 |    4 |                      1 |                       1 |                       4 |    1 |
| 26 |    4 |                      0 |                       2 |                       4 |    2 |
| 25 |    5 |                      1 |                       1 |                       5 |    1 |
+----+------+------------------------+-------------------------+-------------------------+------+
19 rows in set (0.13 sec)
------------------
да пребудет с вами гугл!
...
Рейтинг: 0 / 0
24.03.2005, 16:47
    #32979172
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из 2-х таблиц
2 maXmo

Так ты кинь, структуру таблицы и тестовые данные, а то так вообще не понятно, что там наворотил.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка из 2-х таблиц / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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