2016-03-15 45 views
3

所以我希望能夠從數組中獲取值並在SQL查詢中使用它,並從這些行中獲取信息。我當前的代碼是像這樣:如何針對數組運行foreach並將其包含在SQL查詢中?

$config['exclude_devices'] = array('1','5'); 

$exclude = $config['exclude_devices']; 
foreach ($exclude as $excluded) { 
    $deviceinformation = mysqli_query($db, "SELECT * FROM `devices` WHERE `device_id` NOT IN(" . $excluded . ")"); 
} 
while ($row = mysqli_fetch_assoc($deviceinformation)) { 
    // do stuff here 
    // write to a variable for use in a table 
} 

然而,這給設備1,2,3,4的輸出。

如果我移動到foreach包括while,它產生2,3,4,5,1,2,3,4:

$exclude = $config['exclude_devices']; 
foreach ($exclude as $excluded) { 
    $deviceinformation = mysqli_query($db, "SELECT * FROM `devices` WHERE `device_id` NOT IN(" . $excluded . ")"); 
    while ($row = mysqli_fetch_assoc($deviceinformation)) { 
     // do stuff here 
    } 
} 

我怎麼能修改此代碼只能生產設備沒有在配置中列出?

+1

你想要做什麼,這可能是有幫助的 - http://stackoverflow.com/questions/920353/can-i-bind-an-陣列到狀態 – WillardSolutions

+0

選擇device_id不是「1」的記錄 - 選擇全部包括「5」。選擇device_id不是「5」的記錄 - 選擇全部包括「1」。爲什麼? –

回答

6

在例1:

您運行:

SELECT * FROM `devices` WHERE `device_id` NOT IN(3) 

然後

SELECT * FROM `devices` WHERE `device_id` NOT IN(5) 

然後,您可以只取第二個查詢結果,因此你應當得到與非5的IDS設備。

我會使用implode,所以你排除你不想要的所有ID。

$excluded = implode(',', $config['exclude_devices']); 
$deviceinformation = mysqli_query($db, "SELECT * FROM `devices` WHERE `device_id` NOT IN(" . $excluded . ")"); 
while ($row = mysqli_fetch_assoc($deviceinformation)) { 
    // do stuff here 
} 

演示:https://eval.in/536862
SQL演示:http://sqlfiddle.com/#!9/e4ed47/2

+0

我曾試過爆炸,無論是否有數組。 ''''implode'''起作用。非常感謝。 – Spydar007

相關問題