Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите найти лучшее решение / 15 сообщений из 15, страница 1 из 1
21.10.2016, 08:12
    #39331174
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
Мужики такой вроде просто вопрос, который вызвал у меня затык может переработал

Есть две таблицы users, foods

foods имеет поля id, user_id, tovar, kachestvo

tovar - бывает любым
kachestvo - три параметра low, medium, high

Как собрать правильно по каждому tovar пятерку лидеров из числа юзеров, где на каждый товар будет top-5 по low, top-5 по medium, top-5 по high
...
Рейтинг: 0 / 0
21.10.2016, 08:15
    #39331177
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
Лидеров имею ввиду по количеству обладаний каждым юзеров tovarov нужного качества

пример top-5 low
ivanov - 36
markov - 15
....

top-5 medium
markov - 19
sergeev -16
....

top-5 high
orlov - 21
ivanov - 15
...
...
Рейтинг: 0 / 0
21.10.2016, 10:50
    #39331294
trew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
DonDiego,

Напиши три запроса т.е. для каждого параметра (low, medium, high)
и соедини эти запросы через UNION ALL
...
Рейтинг: 0 / 0
21.10.2016, 11:31
    #39331349
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
SELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'low'
union all
SELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'medium'
union all
SELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'high'

а дальше что?
...
Рейтинг: 0 / 0
21.10.2016, 11:34
    #39331354
trew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
DonDiego,

19806931
Где top 5 в каждом запросе?
WHERE tovar = '12' -- это не нужно, просто группировка по товару в запросе.
...
Рейтинг: 0 / 0
21.10.2016, 11:40
    #39331367
trew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
DonDiegoSELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'low'
union all
SELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'medium'
union all
SELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'high'

а дальше что?

примерно так:
Код: sql
1.
2.
3.
4.
5.
SELECT top 5
user_id 
FROM foods 
WHERE tovar = '12' AND kachestvo = 'low'
GROUP BY user_id 
...
Рейтинг: 0 / 0
21.10.2016, 11:54
    #39331386
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
trewDonDiegoSELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'low'
union all
SELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'medium'
union all
SELECT * FROM foods WHERE tovar = '12' AND kachestvo = 'high'

а дальше что?

примерно так:
Код: sql
1.
2.
3.
4.
5.
SELECT top 5
user_id 
FROM foods 
WHERE tovar = '12' AND kachestvo = 'low'
GROUP BY user_id 



Я чего-то не догоняю )) мне же как раз надо топ 5 найти то есть у кого больше всего вхождений и еще и посчитать эти вхождения
...
Рейтинг: 0 / 0
21.10.2016, 11:55
    #39331392
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
сейчас с Вашей помощью допер до такого

SELECT user_id
FROM `foods`
WHERE tovar = '12' AND kachestvo = 'low'
GROUP BY user_id
LIMIT 5

выводит список топ 5
а как чтобы он сразу посчитал сколько каждый
...
Рейтинг: 0 / 0
21.10.2016, 11:56
    #39331395
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
DonDiego,

Хотя нет это не топ 5 выходит просто первые 5 записей
...
Рейтинг: 0 / 0
21.10.2016, 12:01
    #39331403
trew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
DonDiego,

возможно так:
Код: sql
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
SELECT
	user_id, 
	kachestvo
FROM
(
SELECT top 5
	user_id, 
	kachestvo,
	COUNT(user_id) as cc 
FROM foods 
WHERE tovar = '12' AND kachestvo = 'low'
GROUP BY 
	user_id,
	kachestvo		
ORDER BY cc DESC

UNION ALL

SELECT top 5
	user_id, 
	kachestvo,
	COUNT(user_id) as cc 
FROM foods 
WHERE tovar = '12' AND kachestvo = 'medium'
GROUP BY 
	user_id,
	kachestvo		
ORDER BY cc DESC

UNION ALL

SELECT top 5
	user_id, 
	kachestvo,
	COUNT(user_id) as cc 
FROM foods 
WHERE tovar = '12' AND kachestvo = 'high'
GROUP BY 
	user_id,
	kachestvo		
ORDER BY cc DESC
) TT
...
Рейтинг: 0 / 0
21.10.2016, 12:03
    #39331407
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
trew,

в MySQL нет конструкции top 5. Есть LIMIT.
...
Рейтинг: 0 / 0
21.10.2016, 12:24
    #39331441
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
trew,

Спасибо попробую сейчас, напишу
...
Рейтинг: 0 / 0
21.10.2016, 12:25
    #39331442
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
miksofttrew,

в MySQL нет конструкции top 5. Есть LIMIT.

вот и я не пойму про top 5, думаю может не знаю я такого, читать стал ))
...
Рейтинг: 0 / 0
21.10.2016, 13:55
    #39331546
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
DonDiegomiksofttrew,

в MySQL нет конструкции top 5. Есть LIMIT.

вот и я не пойму про top 5, думаю может не знаю я такого, читать стал ))

Код: sql
1.
2.
3.
4.
5.
select tovar,userId,type,count(*) as 'total'
from table
group by tovar,userId,type

order by tovar,type,`total`



получим
масло вася лоу 12
масло петя ло2 16
.....
тоже для масло медиум, и для масла хай
а также для хлеба, гвоздей, конструкторов-лего и книжек-по-базам-даным :)

и вот теперь задача - для групы масло-лоу взять первые пять строк
для группы масло-медиум 5 записей, для хай 5
и так для каждой групы товар-качество только пять записей.

в шапке форума есть тема - гурпировка, нумерация , нумерация в группе

дальше сделать как там написано
групой у тебя выступает не одно поле а два - товар и качество, остальное всё как в тех примерах
...
Рейтинг: 0 / 0
21.10.2016, 14:43
    #39331608
DonDiego
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти лучшее решение
прочитал не понял
кто-нить может показать правильную конструкцию?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите найти лучшее решение / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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