Mysql查询与group by和order通过涉及几个表

时间:2015-09-19 14:03:05

标签: mysql

我遇到了有关查询的问题,因为我没有所有记录而且我不知道为什么 这是查询

SELECT `ebspma_paad_ebspma`.`semana_dias`.`dia`,`ebspma_paad_ebspma`.`req_material_sala`.`sala`, `ebspma_paad_ebspma`.`req_material_tempo`.`inicio`, `ebspma_paad_ebspma`.`sala_ocupacao`.`id_ocup`, `ebspma_paad_ebspma`.`turmas`.`turma`
FROM `ebspma_paad_ebspma`.`sala_ocupacao` 
INNER JOIN `ebspma_paad_ebspma`.`semana_dias` 
ON (`sala_ocupacao`.`id_dia` = `semana_dias`.`id_dia`)
INNER JOIN `ebspma_paad_ebspma`.`req_material_sala` 
ON (`sala_ocupacao`.`id_sala` = `req_material_sala`.`idsala`)
LEFT  JOIN `ebspma_paad_ebspma`.`req_material_tempo` 
ON (`sala_ocupacao`.`id_tempo` = `req_material_tempo`.`idtempo`)
LEFT  JOIN `ebspma_paad_ebspma`.`turmas` 
ON (`sala_ocupacao`.`id_turma` = `turmas`.`id_turma`)
where`ebspma_paad_ebspma`.`sala_ocupacao`.`id_turma` = '$turma' 
GROUP BY  `ebspma_paad_ebspma`.`sala_ocupacao`.`id_dia` ,  `ebspma_paad_ebspma`.`req_material_tempo`.`inicio` ASC";

运行此查询我几乎有记录,但这是一个学校的时间表,当一个班级被分为两组时,我有两个教室。有了这个查询,我只有一个组 例如,课程在下午1点开始,在两个教室(27和31),这个查询我应该在下午1点,教室X在27和31教室,但我只有第一个 要检查的图片http://postimg.org/image/u24r35fkz/ 我的数据库图片http://postimg.org/image/hyvpb1qz1/ce7a7320/

我的查询出了什么问题?

由于

更新1

我已将查询简化为

SELECT t2.`dia` , t3.`sala` , t4.`inicio` , t1.`id_ocup` , t5.`turma` 
FROM  `ebspma_paad_ebspma`.`sala_ocupacao` AS t1
INNER JOIN  `ebspma_paad_ebspma`.`semana_dias` AS t2 ON ( t1.`id_dia` = t2.`id_dia` ) 
INNER JOIN  `ebspma_paad_ebspma`.`req_material_sala` AS t3 ON ( t1.`id_sala` = t3.`idsala` ) 
LEFT JOIN  `ebspma_paad_ebspma`.`req_material_tempo` AS t4 ON ( t1.`id_tempo` = t4.`idtempo` ) 
LEFT JOIN  `ebspma_paad_ebspma`.`turmas` AS t5 ON ( t1.`id_turma` = t5.`id_turma` ) 
WHERE t1.`id_turma` =12
GROUP BY t1.`id_dia` , t3.`idsala` , t4.`inicio` 

现在我可以看到所有类但不是正确的顺序,顺序应该由t4。inicio和日(id dia)

给出

1 个答案:

答案 0 :(得分:0)

您不是按sala进行分组,因此MySQL会表现不佳,并为您提供符合其他要求的随机行。功能更好的数据库引擎会给您一个错误,指出您没有聚合或分组所有结果列。

如果您将sala添加到GROUP BY,您应该会看到差异。

对于排序:你并没有要求数据库ORDER BY任何东西,所以行将按照它们碰巧出现的顺序排列。可能想要添加ORDER BY t4.inicio, t1.id_dia来处理它。