在一个查询中的多个表上的GROUP_CONCAT

时间:2012-08-09 19:38:21

标签: mysql

我正在投票站点上工作,其中每个投票的基本信息存储在一个表中,选项存储在另一个表中,并且投票存储在另一个表中。这种结构给了我最大的灵活性,但由于我不是mySQL专家,我在查询时遇到了一些问题,无法立即检索所有相关数据。

到目前为止,我已经能够使用GROUP_CONCAT选择CSV作为选择,但是对于当前结构,我不知道如何再次使用GROUP_CONCAT来获取投票列表。我到目前为止使用的查询看起来像这样:

SELECT polls.id AS id, polls.name AS name, polls.time AS time, polls.description AS description, ch.choices 
FROM (SELECT poll, GROUP_CONCAT(name) AS choices FROM choices GROUP BY poll) AS ch 
JOIN polls ON ch.poll = polls.id 
ORDER BY polls.time DESC 
LIMIT 0, ' . ($count - 1)

投票表中的相关列是'poll'和'vote',其中poll与polls.id相同,而vote对应于choice.id。除了细节之外,我真正需要知道的是如何使用GROUP_CONCAT在单个查询中从两个表中检索值,而不是只检索一个表。我很感激任何意见。谢谢!

2 个答案:

答案 0 :(得分:0)

您的要求有些不清楚。如果您记录表结构以进行民意调查,投票和选择,则可能更容易提供帮助。

我的第一次尝试:

Select polls.id as id, polls.name as name, polls.time as time,
    polls.description as description, ch.choices
FROM polls
INNER JOIN vote ON polls.id=vote.poll_id
INNER JOIN vote ON vote.id=choice.vote_id
ORDER BY polls.time DESC
LIMIT 0, 30

答案 1 :(得分:0)

解决方案最终比我意识到的要简单得多;我的原始查询不必要地复杂化。我最终在SELECT语句中执行GROUP_CONCATs作为函数,并且工作正常。这就是我最终的结果:

SELECT polls.id AS id, polls.name AS name, polls.time AS time, polls.description AS description, 
(SELECT GROUP_CONCAT(name SEPARATOR "|") FROM choices WHERE poll = polls.id) as choices, 
(SELECT GROUP_CONCAT(choice SEPARATOR "|") FROM votes WHERE poll = polls.id) as votes 
FROM polls 
ORDER BY polls.time DESC