2016-01-15 62 views
0

所以我有以下查詢:在for或foreach循環中執行此查詢是不好的做法嗎?

$resclients=$mysqli->query("SELECT id,client_name FROM clients WHERE id IN ($result[])"); 

而且我很納悶,難道是不好的做法,在執行上述查詢或的foreach循環,它傷害了MySQL服務器?

或者,是它更好地做LEFT JOINS內連接右連接

忘了添加,$ result []實際上是一個二維數組。

顯示你的陣列:

Array 
(
    [0] => Array 
     (
      [id] => 7 
      [resclients] => 6,7,8,9,10,11,12,13,14,15 
     ) 

    [1] => Array 
     (
      [id] => 5 
      [resclients] => 5 
     ) 

    [2] => Array 
     (
      [id] => 4 
      [resclients] => 4 
     ) 
) 

的只是一小部分。

+0

*這是不好的做法* - 這可以根據你被教導的方式或地點來定位。 – Script47

+0

它取決於$結果 – devpro

+0

將您的數組轉換爲逗號分隔使用implode()比在查詢中使用ids,在這種情況下不需要在循環中使用查詢 – devpro

回答

1

你可以使用它作爲:

// a testing multidimensional array 
$testArr = array(
     array(
      'one'=>1, 
      'two'=>2, 
      'three'=>3) 
     ); 

$yourIds = array(); 
foreach ($testArr as $value) { 
    foreach ($value as $finalVal) { 
     $yourIds[] = $finalVal[]; 
    } 
} 

$implodedIds = implode(",",$yourIds); 
echo "SELECT id,client_name FROM clients WHERE id IN ($implodedIds)"; 

結果:

SELECT id,client_name FROM clients WHERE id IN (1,2,3) 

需要注意的是:這是你怎麼能沒有在循環中使用查詢中使用基本的想法。

+0

你是TL; DR我的問題?你能解釋一下這個代碼嗎?因爲我無法完全遵循它,很不清楚,但我可能是錯的。 –

+0

我需要像這樣運行查詢和訪問數據,$ result [0] [resclients],查看我的數組,每個INDEX提供一個resclients關鍵字,它們使用GROUP_CONCAT保存連接結果。 –

+0

@JohnSmith:好的,我正在用你的例子進行解釋...... – devpro