2012-03-03 51 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);