2017-03-07 25 views
1

我有一個不同的表people。我想將它們連接到我的house如何在MySQL中加入非規格化表格?

house表:

+-------+---------+---------+---------+ 
| house | person1 | person2 | person3 | 
+-------+---------+---------+---------+ 
|  1 |  2 |  4 |  1 | 
|  2 |  3 |  1 |  2 | 
+-------+---------+---------+---------+ 

people表:

+----+------+ 
| id | name | 
+----+------+ 
| 1 | fred | 
| 2 | john | 
| 3 | leo | 
| 4 | tom | 
+----+------+ 

是這樣的可能嗎?

$pdo = $db->query(' 
SELECT * 
FROM house 
LEFT JOIN people 
ON house.person1=people.id 
AND house.person2=people.id 
;'); 
while ($row = $pdo->fetch(PDO::FETCH_ASSOC)) { 
    echo "Person 1 = ".$row['name']; 
    echo "Person 2 = ".$row['name']; 
} 
+4

請改變你的'房子'表**每行**一人**不是每個人一列_。即一行:'house_id int,person_id int'。這樣,你可以添加新的人到房子裏。使用小組功能來統計每個家庭的人數。聯結更容易將人員與房屋相匹配。 –

+2

你應該規範你的房子桌子,否則你需要加入到人桌子3次。 – Shadow

+0

嘗試使用'OR'而不是'AND'。像'house.person1 = people.id 或house.person2 = people.id' – Manish

回答

3

你靠近,你需要ORIN()代替AND

SELECT * 
FROM house h 
LEFT JOIN people p ON p.id IN(h.person1,h.person2,h.person3) 

但我相信,更好的方法是通過提出意見,以改變你的表設計。在這種情況下,你只需要:

SELECT * 
FROM house h 
LEFT JOIN people p ON h.person = p.id 
3

您應該使用自連接的表人3名與3別名

$pdo = $db->query(' 
    SELECT *, people1.name as name1, people2.name as name2, people3.name as name3 
    FROM house 
    LEFT JOIN people as people1 ON house.person1=people1.id 
    LEFT JOIN people as people2 ON house.person2=people2.id 
    LEFT JOIN people as people3 ON house.person3=people3.id 
    ;'); 
    while ($row = $pdo->fetch(PDO::FETCH_ASSOC)) { 
     echo "Person 1 = ".$row['name1']; 
     echo "Person 2 = ".$row['name2']; 
     echo "Person 3 = ".$row['name3']; 
    } 
+0

@RyanVincent非常感謝您的建議...缺少正確的表別名..答案更新.. – scaisEdge

+0

@Jarla這是**錯誤**做法。在你的問題下看到評論。 – Strawberry

1

,如果你需要知道3人的名字在家裏,你可以使用這個

$pdo = $db->query(' 
select A.house, B.name as person1, C.name as person2, D.name as person3 
from house A join people B on (A.person1=B.id) left join people C on (A.person2=C.id) join people D on (A.person3=D.id) 
;'); 
while ($row = $pdo->fetch(PDO::FETCH_ASSOC)) { 
    echo "house = ".$row['house']; 
    echo "Person 1 = ".$row['person1']; 
    echo "Person 2 = ".$row['person2']; 
    echo "Person 2 = ".$row['person3']; 
}