2014-05-07 78 views
-3

我的代碼是:在代碼中如何優化?

$text = '12-10-4-32-45-name-sara-x-y-86'; 
$array = explode('-',$text); 
foreach($array as $value) { 
    $sql = mysql_query("SELECT * FROM `table` WHERE `pid`='$value' ORDER BY `id` LIMIT 3"); 
    while($row = mysql_fetch_array($sql)) { 
     echo $row['title']; 
     echo ''; 
    } 
    echo ''; 
} 

此代碼工作滿,但如果在$文本中使用150的變量,服務器停機!

如何優化大多數變量的代碼?

THX

+1

使用'IN'子句,也許? '$ sql = mysql_query(「SELECT * FROM table WHERE pid IN($ in)...'。(注意上面的代碼仍然**易受SQL注入攻擊**。此外,'mysql_ *'函數被棄用。您應該切換到MySQLi/PDO並使用預準備語句正確地轉義輸入。) –

+0

瞭解MySQL IN子句 –

+0

此問題可能會對您有所幫助: http://stackoverflow.com/questions/8270134/checking-value-in -an-array-inside-one-sql-query-with-where-clause – knut2

回答

0

如果你需要所有的人都爲IDS(其中包括一個字符串,它是怪異)。考慮下面這個例子:

$text = '12-10-4-32-45-name-sara-x-y-86'; 
$text = array_unique(explode('-', $text)); // just in case there are duplicate ids 
$statement = 'SELECT * FROM `table` WHERE `pid` IN("'.implode('", "', $text).'") ORDER BY `id` LIMIT 3'; 

// should be like this 
// SELECT * FROM `table` WHERE `pid` IN("12", "10", "4", "32", "45", "name", "sara", "x", "y", "86") ORDER BY `id` LIMIT 3 
// then just continue on your mysql_query 
$sql = mysql_query($statement); 
while($row = mysql_fetch_assoc($sql)) { 
    // print your values or whatever it is you need to do 
    // echo $row['title']; 
} 

注意:您不需要查詢每個值,這將是資源的浪費總量。想象你的文字有(如你所說)150個數字。嘗試使用mysql的IN(),以便它只是進行一次查詢。

+0

Thx,但我使用NUMBER AND VARCHAR! – user3612383

+0

@ user3612383如果你真的需要他們全部在查詢裏面,我編輯了答案 – user1978142

+0

Thx,但是這段代碼返回最後3個三個查詢。但是我想得到最後3個三個查詢,每個$ text的值 – user3612383