加入3个表格,不输出第三个表格的所有结果?
我有三个表:加入3个表格,不输出第三个表格的所有结果?
Student - UPN, Name, Year, House
Seclusion_Status - ID, Arrived, FTE, Rebuild, DateTimeAdded, Staff, Student_UPN (fk), Comment
Period_Rating - ID, Slot_ID, Rating, Date, Seclusion_ID (fk)
每个学生都可以有许多条目在Seclusion_Status表,然后也有在Period_rating表,它链接到Seclusion_status表与Seclusion_ID
许多条目我正在运行以下查询以基于日期从Seclusion_Status返回一条记录,然后在Period_rating表中与Seclusion_status记录相关的所有记录。
$sql="SELECT * FROM Seclusion_Status
INNER JOIN Students ON Seclusion_Status.Student_UPN=Students.UPN
JOIN Period_Rating ON Seclusion_Status.ID=period_rating.Seclusion_ID
WHERE period_rating.Date = '$start'
GROUP BY period_rating.Seclusion_ID
ORDER BY Seclusion_Status.DateTimeAdded ASC";
$result=mysql_query($sql);
// Start looping rows in mysql database.
while($rows=mysql_fetch_array($result)){
该查询返回Seclusion_Status记录,并在Period_rating然后第一条记录,而不是其他。
Array
[0] => 348
[ID] => 157
[1] => Y
[Arrived] => Y
[2] => N
[FTE] => N
[3] =>
[Rebuild] =>
[4] =>
[Text] =>
[5] => 2016-03-04 09:30:50
[DateTimeAdded] => 2016-03-04 09:30:50
[6] => Mr S Holland
[Staff] => Mr S Holland
[7] => K80222800
[Student_UPN] => K8022280
[8] => Refusing instructions
[Incident] => Refusing instructions
[9] =>
[Period] =>
[10] =>
[Period_In_ID] =>
[11] => Not sitting properly in class despite being asked
[Comment] => Not sitting properly in class despite being asked
[12] => K80222800
[UPN] => K80222800
[13] => Student Name
[Name] => Student Name
[14] => Year 9
[Year] => Year 9
[15] => Acer
[House] => Acer
[16] => 157
[17] => P2
[Slot_ID] => P2
[18] =>
[Rating] =>
[19] => 2016-03-04
[Date] => 2016-03-04
[20] => 348
[Seclusion_ID] => 348
[21] => 1
[Status] => 1
该查询返回Seclusion_Status记录,然后在Period_rating第一条记录,而不是其他。
您有一个GROUP BY period_rating.Seclusion_ID
指示mysql为每个Seclusion_ID返回一条记录。将group by子句取出,查询将返回多个匹配的记录。
问题是如果你使用连接,如果数据在所有三个表中都存在,那么只有它会获取。
如果你想获取表中的所有条目,你需要使用外连接,不幸的是你不能在mysql中使用外连接。
,但你可以通过unioning leftjoin结果取结果和正确的连接结果
左右连接**是**外连接。 MySQL没有的是完全外连接,你正确地写道它可以通过联合和左/右连接进行模拟。 – Shadow
好的。我已经删除了这个声明,并且这种解决了这个问题。它现在正在返回所有的数据。我将这些数据写入表格的行中,并且每个学生需要一个单独的行,但是在同一行中为该学生记录所有的period_rating记录。在它循环的那一刻,它为Period_rating中的每条记录在单独的行上写入同一个学生。 – user3122230
对不起,但这是与原来不同的问题。如果这个答案帮助你解决你的问题,那么请接受答案,并在他们自己的话题中提出任何后续问题! – Shadow