gpt4 book ai didi

MYSQL - GROUP_CONCAT 和 FIND_IN_SET 是混合值/顺序吗?

转载 作者:行者123 更新时间:2023-11-29 12:49:33 29 4
gpt4 key购买 nike

我遇到以下问题:我尝试选择用户所做的所有投票并将其放在一列中。我使用 GROUP_CONCAT 来实现此目的,但不知何故它混合了值顺序。

这是 SQL 代码:

SELECT 
GROUP_CONCAT(DISTINCT options.option_name SEPARATOR ',') AS selected,
user_login.firstname, user_login.lastname,
event.event_title
FROM
options, user_login, event, votes, questions
WHERE
event.id = ? AND questions.Event_id = event.id
AND votes.user_id = user_login.id AND votes.question_id = questions.id
AND FIND_IN_SET(options.id, selected)

分组依据 用户登录ID 订购依据 user_login.class

投票的示例值是:

id |  event_id  | question_id  |  selected   |  user_id
25 14 42 52,46,41 1
26 14 43 68 1

选项如下:

id |  option_name   | question_id
40 Project A 42
41 Project B 42
46 Project C 42
52 Project D 42
67 Hello 43
68 Bye 43

问题如下:

id  |  question_name  | event_id
42 Project Number 14
43 Greeting 14

事件如下:

id  |  title
14 Project Testing

给定代码的输出是:

selected                            |  event_title
Project C, Bye, ProjectD, Project B Test

我怎样才能保留原来的顺序,以便它输出我:项目 D,项目 C,项目 B,再见?

最佳答案

这样的东西有用吗?基本上你说的是按字段值排序并使它们看起来像“52”,“46”,...等。

SELECT 
GROUP_CONCAT(DISTINCT options.option_name
ORDER BY FIELD( options.id,
concat('"',
replace(selected, ',', '","'),
'"')
)
SEPARATOR ','
) AS selected,
user_login.firstname, user_login.lastname,
event.event_title
FROM options, user_login, event, votes, questions
WHERE event.id = ? AND questions.Event_id = event.id
AND votes.user_id = user_login.id AND votes.question_id = questions.id
AND FIND_IN_SET(options.id, selected)
GROUP BY user_login.id
ORDER BY user_login.class
<小时/>

编辑:

我的首选方法是创建一个包含字符串的变量..它更易于阅读,并且您可以确保它以这种方式执行正确的顺序..

SET @order_field := (
SELECT
group_concat(
CONCAT('"', replace(selected, ',', '","'), '"')
)
FROM votes);

那么查询会更容易阅读...

SELECT 
GROUP_CONCAT(DISTINCT options.option_name
ORDER BY FIELD( options.id, @order_field)
SEPARATOR ','
) AS selected,
user_login.firstname, user_login.lastname,
event.event_title
FROM options, user_login, event, votes, questions
WHERE event.id = ? AND questions.Event_id = event.id
AND votes.user_id = user_login.id AND votes.question_id = questions.id
AND FIND_IN_SET(options.id, selected)
GROUP BY user_login.id
ORDER BY user_login.class

关于MYSQL - GROUP_CONCAT 和 FIND_IN_SET 是混合值/顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24972195/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com