根据条件从不同的表中选择

时间:2014-10-01 12:04:23

标签: mysql sql select if-statement

我有一张桌子comments - >

id | comment | type | userid | 
1    Hello     human    9
2    Hi        robot    4
3    Gnaw!     animal   1
4    Boo       ghost    2

此外,我还有四个表humanrobotghostanimal 这些表包含一些关于他们自己的基本细节......

现在我知道评论的价值说:$ 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"));
 }

这会获取有关评论者的所有数据,但这会被证明太慢....有什么方法可以将这个结合在一个查询中吗?

1 个答案:

答案 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

我更喜欢第二个选项,因为这个选项可以更容易地加入大量的细节列。我不认为在性能方面存在很大差异。