1

私は、各投票の基本情報が 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 を使用して、1 つのクエリで 1 つのテーブルだけでなく 2 つのテーブルから値を取得する方法だけです。ご意見をいただければ幸いです。ありがとう!

4

2 に答える 2

1

解決策は、私が思っていたよりもはるかに単純なものになりました。私の元のクエリは不必要に複雑でした。私は GROUP_CONCATs を SELECT ステートメントの関数として実行することになりましたが、うまくいきました。これが私が最終的に得たものです:

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 に答える