MySQL - 冷凝查询

时间:2012-03-03 22:01:51

标签: php mysql

对于MySQL而言,我是自学成才,我不确定这样做的正确方法是什么:

$type1_sql          ="SELECT * FROM type1 WHERE type1_id=$type1_id";    
$type1_res          =mysqli_query($handle_db, $type1_sql);
$type1_row          =mysqli_fetch_array($type1_res);
$type1_name         =$type1_row['name'];

$type2_sql          ="SELECT * FROM type2 WHERE type2_id=$type2_id";    
$type2_res          =mysqli_query($handle_db, $type2_sql);
$type2_row          =mysqli_fetch_array($type2_res);
$type2_name         =$type2_row['name'];

$type3_sql          ="SELECT * FROM type3 WHERE type3_id=$type3_id";    
$type3_res          =mysqli_query($handle_db, $type3_sql);
$type3_row          =mysqli_fetch_array($type3_res);
$type3_name         =$type3_row['name'];

做我正在做的事情会更好吗?单独查询所有内容,或者有没有办法将所有这些内容压缩成一个查询?

谢谢, 杰森

2 个答案:

答案 0 :(得分:0)

如果您只需要每个表的name列,则可以使用SELECT UNION查询:

(SELECT name FROM type1 WHERE type1_id=$type1_id)
UNION
(SELECT name FROM type2 WHERE type2_id=$type2_id)
UNION
(SELECT name FROM type3 WHERE type3_id=$type3_id);

答案 1 :(得分:0)

重要提示:考虑到虽然@Alp的解决方案可能正是您所需要的:

(SELECT name FROM type1 WHERE type1_id=$type1_id)
UNION
(SELECT name FROM type2 WHERE type2_id=$type2_id);
UNION
(SELECT name FROM type3 WHERE type3_id=$type3_id);

如果$type1_id等于$type2_id,它将删除可能找到的所有重复项。如果要完全选择所有结果(包括重复行),则应运行此操作(删除不必要的括号):

SELECT name FROM type1 WHERE type1_id=$type1_id
UNION ALL
SELECT name FROM type2 WHERE type2_id=$type2_id
UNION ALL
SELECT name FROM type3 WHERE type3_id=$type3_id;