我有两个MySQL表:
民意调查表,带有ID和标题......
+----+------------------------------------------------------+
| ID | title |
+----+------------------------------------------------------+
| 1 | ¿Con qué frecuencia accedes a Moodle? |
| 2 | ¿Qué medio de transporte usas más frecuentemente? |
+----+------------------------------------------------------+
和poll_data表,带有选项......
+----+--------+-------------------------+-------+
| 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 |
+----+------------------------------------------------------+-------------------------+-------+
答案 0 :(得分:2)
正如大家在评论中所说,这是显示您的数据的问题。但是,如果您真的想在纯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