【发布时间】:2018-02-14 16:55:06
【问题描述】:
我提前道歉,因为我可能没有正确描述我的问题。我正在尝试编写一个查询,该查询获取每个用户前 5 个最受欢迎的 selected_user_items,并通过 group_concat 将每个用户的前几行连接成逗号分隔的字符串,然后按 user_id 进行分组。
例如,如果 user_id 为 1 的 item_id 为 1 有 5 行,item_id 为 2 有 2 行,item_id 为 3 有 3 行,4 5 和 6 有 1 行,那么结果将是 1, 3 , 2, 4, 5。
这是我的示例表结构。
姓名:chosen_user_items
id | user_id | item_id
------------------------
1 | 1 | 1
2 | 1 | 4
3 | 1 | 19
4 | 1 | 10
5 | 1 | 13
. | 1 | 1
. | 1 | 11
. | 1 | 18
. | 1 | 212
. | 1 | 654
. | 2 | 1
. | 2 | 28
. | 2 | 568
. | 2 | 112
. | 2 | 354
. | 3 | 4
. | 3 | 4
. | 3 | 19
. | 3 | 212
. | 3 | 654
. | 3 | 4
. | 3 | 4
. | 3 | 253
. | 3 | 187
. | 3 | 212
这是我想要的输出示例:
user_id | group_concat_results
------------------------------
1 | 1, 4, 19, 13, 212
2 | 1, 28, 568, 212, 354
3 | 4, 212, 19, 654, 253
这是我目前的查询
SELECT `chosen_user_items`.`item_id`, COUNT(`chosen_user_items`.`item_id`) AS 'item_count'
FROM `chosen_user_items`
WHERE `chosen_user_items`.`user_id` = 1
GROUP BY `chosen_user_items`.`item_id`
ORDER BY `item_count` DESC
LIMIT 5
虽然这对单个用户很有用,但我希望能够为所有用户只运行一次此查询(以避免执行数百或数千个数据库查询),并且必须手动连接一种语言的结果比如PHP。
提前致谢。
【问题讨论】:
标签: mysql group-by limit group-concat