2012-03-03 50 views
0

我是自学的,当涉及到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

如果查询是不相关的,它们都服务于不同的目的,有没有办法把它们结合起来那很好。除非你只是使用'name',否则你不需要查询'*'所有记录 – 2012-03-03 22:06:09

回答

0

重要:要考虑到的是,虽然@工党的解决方案可能是你在寻找什么:

(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。如果你想充分选择所有结果(包括重复的行),你应该用这个(除去unnecesary括号内):

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; 
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);