gpt4 book ai didi

mysql - INSTR() 和 GROUP_CONCAT() 在服务器之间返回不同的结果

转载 作者:行者123 更新时间:2023-11-29 00:13:08 26 4
gpt4 key购买 nike

我在开发和生产服务器上运行相同的查询时遇到问题。我的应用程序存储 session 发言人和 session 。运行 MySQL 5.1 的开发服务器仅正确返回事件 session 的相关发言人,但运行 MySQL 5.0.9 的生产服务器返回多个不一定与该 session 关联的发言人。 (注意:此时我无法将生产服务器升级到 5.1。)

发言人表:

+------------+--------------+
| speaker_id | name |
+------------+--------------+
| 100 | John Doe |
| 200 | Steve Rogers |
| 300 | Tony Stark |
+------------+--------------+

session 表:

 +------------+------------------+
| session_id | session_speakers |
+------------+------------------+
| 1 | [100] |
| 2 | [100,200] |
| 3 | [300] |
+------------+------------------+

SELECT
s.session_id,
GROUP_CONCAT(DISTINCT sp.name SEPARATOR ' & '),
FROM
sessions s
LEFT JOIN
speakers sp ON INSTR(s.session_speakers, sp.speaker_id)
GROUP BY
s.session_id

session_id = 1 的开发服务器结果

'John Doe'

session_id = 1 的典型生产服务器结果

'John Doe & Steve Rogers & &'

最佳答案

你应该标准化你的表格布局:

speakers
+------------+--------------+
| speaker_id | name |
+------------+--------------+
| 100 | John Doe |
| 200 | Steve Rogers |
| 300 | Tony Stark |
+------------+--------------+

sessions_to_speakers
+------------+------------------+
| session_id | session_speakers |
+------------+------------------+
| 1 | 100 |
| 2 | 100 |
| 2 | 200 |
| 3 | 300 |
+------------+------------------+

sessions
+------------+--------------+
| session_id | name |
+------------+--------------+
| 1 | Session 1 |
| 2 | Session 2 |
| 3 | Session 3 |
+------------+--------------+

然后你可以使用一个简单的“加入”来获得所有的演讲者:

SELECT * FROM speakers INNER JOIN sessions_to_speakers ON 
sessions_to_speakers.session_speakers = speakers.speaker_id
WHERE sessions_to_speakers.session_id = 1;

建议:修复您的列名称。如果它不是外键,请不要重复表名。即 speaker 表的 id 应称为 id(不是 speaker_id) .仅当从 session_to_speaker 表中引用时,它才应称为 speaker_id( session 和引用相同)

关于mysql - INSTR() 和 GROUP_CONCAT() 在服务器之间返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003522/

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