我有一张桌子comments
- >
id | comment | type | userid |
1 Hello human 9
2 Hi robot 4
3 Gnaw! animal 1
4 Boo ghost 2
此外,我还有四个表human
,robot
,ghost
和animal
这些表包含一些关于他们自己的基本细节......
现在我知道评论的价值说:$ id = 3 如果我做了
$data = mysqli_query($con,"SELECT type FROM comments WHERE id = $id");
while($row = mysqli_fetch_assoc($data)){
$table = $row['type'];
$table_data = mysqli_fetch_assoc(mysqli_query($con,"SELECT * FROM $table"));
}
这会获取有关评论者的所有数据,但这会被证明太慢....有什么方法可以将这个结合在一个查询中吗?
答案 0 :(得分:1)
执行此操作的一种方法是使用左连接。
SELECT c.type, COALESCE(h.detail,r.detail,a.detail,g.detail)
FROM comments
LEFT JOIN human h ON c.type = 'human' AND c.id = h.id
LEFT JOIN robot r ON c.type = 'robot' AND c.id = r.id
LEFT JOIN animal a ON c.type = 'animal' AND c.id = a.id
LEFT JOIN ghost g ON c.type = 'ghost' AND c.id = g.id
另一种方法是在四个表上执行UNION然后加入:
SELECT c.type, q1.detail
FROM comments c
LEFT JOIN
(
SELECT 'human' AS type, detail FROM human
UNION
SELECT 'robot', detail FROM robot
(etc.)
) q1 ON c.type = q1.type AND q1.id = c.id
我更喜欢第二个选项,因为这个选项可以更容易地加入大量的细节列。我不认为在性能方面存在很大差异。