2012-02-14 80 views
0

如果我有,我從一份聲明中選定的ID列表PHP/SQL語句重複查詢

SELECT id FROM myTable WHERE name = 'TEST' 

這將返回剛纔的ID(1001,1002,1003等)然後我想執行另一個SELECT語句來檢索所有這些ID的所有標題。

SELECT title FROM myTable2 WHERE id = XXXX 

table2中的id是table2的外鍵。 myTable中的id是主鍵。我怎樣才能從這些ID檢索所有的標題。我正在考慮將第一個select語句的所有結果存儲在數組中,然後使用while循環遍歷列表並將每個結果返回到另一個數組,但是我擔心數據庫變大時返回1000行,可能會造成一些不良開銷。所以在PHP或SQL中,執行此操作的最佳方式是什麼?

回答

4

您可以使用子查詢:

SELECT title 
FROM myTable2 
WHERE id IN (
SELECT id 
    FROM myTable 
    WHERE name = 'TEST' 
) 

另一種方式來做到這一點會成爲使用JOIN,避免子查詢:

SELECT title 
FROM myTable2 
LEFT JOIN myTable 
ON myTable.id = myTable2.id 
WHERE myTable.name = 'TEST' 
+0

'INNER JOIN'更適合任務 – zerkms 2012-02-14 04:18:11

+0

但是,LEFT JOIN通常比INNER更有效,並且myTable.name上的WHERE條件阻止返回myTable中不存在myTable中的任何行。 – 2012-02-14 04:19:14

+0

如果其他內容相同,INNER JOIN'總是**比'LEFT JOIN'更高效 – zerkms 2012-02-14 04:19:50

-1

同時選擇:

SELECT id, title FROM mytable WHERE name="TEST" 

或選擇整行

SELECT * FROM mytable WHERE name="TEST" 

如果兩個表要從中選擇:

SELECT id, title FROM mytable A JOIN mytable2 B USING (id) 
+0

'(*)'是不是一個有效的SQL語法 – zerkms 2012-02-14 04:17:27

+0

你是對的,固定 – JimmyBanks 2012-02-14 04:18:57

+0

,您最近一次的查詢可能會拋出一個錯誤約隱約指定的列名 – zerkms 2012-02-14 04:19:09

1

你應該只能夠在同一時間進行選擇。

SELECT a.id, b.title 
    FROM myTable a, myTable2 b 
    WHERE a.name = 'TEST' AND b.id = a.id;