2009-12-17 54 views
1

我有一個「主鍵」值的php數組,它對應於一個非常長的數據表的幾行,保存在MySql數據庫中。 如何僅使用一個查詢來獲取這些行。是否可能或將需要爲每個主鍵進行一次查詢? eg: SELECT * FROM table1 WHERE key = 8573如何只從MySql數據庫表中提取某些行

感謝, 帕特里克

+0

不要忘記爲您的表添加索引。在「長數據表」上運行查詢很昂貴。考慮添加這個:alter table table1 add index(key) – Zepplock

回答

4
Select * from table WHERE primary_key IN (8573,8574,8578) 

你的PHP數組,你可以使用破滅

$key_array = implode(",", $array); 

Select * from table WHERE primary_key IN ($key_array) 
9

您可以使用MySQL的IN() operator

... WHERE x in (1,4,9,16) 
+0

IN是一個SQL silver bullet,太多的編碼器不使用,因爲他們不知道或忘記它存在。 – TravisO

2
Select * from table1 WHERE key IN ([values separated by commas]) 
1

兩個選項:

select * from table1 where key in (8573, 5244, 39211); 
select * from table1 where key = 8573 or key = 5244 or key = 39211; 
0

只要使用這種形式的選擇

SELECT * FROM table1 WHERE key IN (1234, 1235, 6789, 9876) 
0

使用PHP的破滅功能:

$keys = array(1,2,3,4); 
$sql = "SELECT * FROM table WHERE key IN (" . implode($keys, ",") . ")"; 
2

在大多數數據庫, 「密鑰(套)」 的作品快於 「鍵=一個或鑰匙= B或...」。

專門爲PHP,你可以使用破滅產生的SQL:

$ SQL = 「select * from表,其中鍵(」 .implode( '',$ KeyArray)) 「)」

假設整數鍵。用字符串鍵,你需要說出來了:

$ SQL = 「select * from表,其中關鍵在( '」 .implode( 「 ''」,$ KeyArray))。 「')」

1

使用OR語句。

SELECT * FROM table1 WHERE key=8573 OR key=9999; 

當然,這可以得到很長,所以你可能會想使用循環和串聯的鑰匙查詢字符串。

1
$query = "SELECT * FROM tableName WHERE primaryKey IN ('" . implode("','", $keys) . "')"; 
相關問題