1

我正在一个投票站点上工作,其中每个投票的基本信息存储在一个表中,选择存储在另一个表中,而投票存储在另一个表中。这种结构给了我最大的灵活性,但是,因为我不是 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 在单个查询中从两个表中检索值,而不仅仅是一个表。我会很感激任何意见。谢谢!

4

2 回答 2

1

解决方案最终比我意识到的要简单得多。我原来的查询是不必要的复杂。我最终在 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 
于 2012-08-09T21:30:53.510 回答
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
于 2012-08-09T20:38:30.777 回答