我有两个MySQL表:
投票表,带有ID和标题。。。
+----+------------------------------------------------------+
| ID | title |
+----+------------------------------------------------------+
| 1 | ¿Con qué frecuencia accedes a Moodle? |
| 2 | ¿Qué medio de transporte usas más frecuentemente? |
+----+------------------------------------------------------+
还有一个民意调查数据表,有选项。。。
+----+--------+-------------------------+-------+
| ID | pollID | text | votes |
+----+--------+-------------------------+-------+
| 1 | 1 | No accedo | 11 |
| 2 | 1 | Una vez al mes | 10 |
| 3 | 1 | Una vez a la semana | 23 |
| 4 | 1 | Una vez al día | 20 |
| 5 | 1 | Más de una vez al día | 19 |
| 6 | 2 | Coche particular | 10 |
| 7 | 2 | Autobus | 20 |
| 8 | 2 | Tranvía | 50 |
| 9 | 2 | Bicicleta | 5 |
| 10 | 2 | Taxi | 5 |
+----+--------+-------------------------+-------+
我想得到这个结果,在一列中只显示一条数据,在另一列中列出多行:
+----+------------------------------------------------------+-------------------------+-------+
| ID | title | text | votes |
+----+------------------------------------------------------+-------------------------+-------+
| 1 | ¿Con qué frecuencia accedes a Moodle? | No accedo | 11 |
| | | Una vez al mes | 10 |
| | | Una vez a la semana | 23 |
| | | Una vez al día | 20 |
| | | Más de una vez al día | 19 |
| 2 | ¿Qué medio de transporte usas más frecuentemente? | Coche particular | 10 |
| | | Autobus | 20 |
| | | Tranvía | 50 |
| | | Bicicleta | 5 |
| | | Taxi | 5 |
+----+------------------------------------------------------+-------------------------+-------+
执行此SQL命令:
SELECT polls.ID, polls.title, poll_data.text, poll_data.votes
FROM polls
INNER JOIN poll_data
ON polls.ID = poll_data.pollID;
我得到这个结果:
+----+------------------------------------------------------+-------------------------+-------+
| ID | title | text | votes |
+----+------------------------------------------------------+-------------------------+-------+
| 1 | ¿Con qué frecuencia accedes a Moodle? | No accedo | 11 |
| 1 | ¿Con qué frecuencia accedes a Moodle? | Una vez al mes | 10 |
| 1 | ¿Con qué frecuencia accedes a Moodle? | Una vez a la semana | 23 |
| 1 | ¿Con qué frecuencia accedes a Moodle? | Una vez al día | 20 |
| 1 | ¿Con qué frecuencia accedes a Moodle? | Más de una vez al día | 19 |
| 2 | ¿Qué medio de transporte usas más frecuentemente? | Coche particular | 10 |
| 2 | ¿Qué medio de transporte usas más frecuentemente? | Autobus | 20 |
| 2 | ¿Qué medio de transporte usas más frecuentemente? | Tranvía | 50 |
| 2 | ¿Qué medio de transporte usas más frecuentemente? | Bicicleta | 5 |
| 2 | ¿Qué medio de transporte usas más frecuentemente? | Taxi | 5 |
+----+------------------------------------------------------+-------------------------+-------+
最佳答案
正如每个人在评论中所说,这是一个展示你的数据的问题。但是如果你真的想在纯MySql上做这件事,就像我说的,这是可能的。这是你需要的(也许可以改进,但我现在太累了,想不出来)
SELECT IF(ord=(cnt-1),id,'') id,
IF(ord=(cnt-1),title,'') title,
text,
votes
FROM
(
SELECT polls.ID,
polls.title,
poll_data.text,
poll_data.votes,
CASE WHEN COALESCE(@remain,0) = 0
THEN @remain:=grouped.cnt-1
ELSE @remain:=@remain-1
END as ord,
grouped.cnt
FROM polls INNER JOIN poll_data
ON (polls.ID = poll_data.pollID)
INNER JOIN
(select pollid,
count(*) cnt
FROM poll_data
GROUP BY pollid) grouped
ON grouped.pollid = polls.ID
ORDER BY polls.id, ord desc) a
在小提琴上看到:http://sqlfiddle.com/#!2/1c7c3/18
关于mysql - 如何在一列中仅显示一条数据,另一列中列出多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20913166/