2014-09-02 67 views
0

所以我有一個查詢來創建一個ID數組,我不想被包含在填充我的選擇列表的數據中。選擇列表和被排除的ID數組都是從mysql數據庫中提取的。我遇到的問題是,當我回顯$ exclude時,它顯示在逗號分隔列表(1,2,3)中正確。但是,當我嘗試將其添加到NOT IN語句中時,它僅排除第一個數字。我需要它排除整個陣列。有任何想法嗎?Php Mysql NOT IN數組隻影響數組中的第一個結果

<?php 
$excludeSql = "SELECT member_id FROM appointments WHERE joint_id = '$jointid'"; 
$excludeData = mysql_query($excludeSql, $link); 
while($excluderow = mysql_fetch_array($excludeData)){ 

    $excludearray[] = $excluderow['member_id']; 

           } 
$exclude = implode(',',$excludearray); 
echo $exclude; 
?> 
<select name="attendees[]">    
    <option value="">--Select--</option> 

     <?php 
     $memberSql = "SELECT id, firstName, lastName FROM members WHERE id NOT IN('".$exclude."') && compid = '$compid' ORDER BY lastName ASC"; 
     $memberResult = mysql_query($memberSql, $link); 
      while($memberRow = mysql_fetch_assoc($memberResult)){?> 
       <option value="<?php echo $memberRow['id'];?>" ><?php echo "".$memberRow['lastName'].", ".$memberRow['firstName'].""; ?></option> 
     <?php } ?>    
</select> 
+1

您可以通過使用子查詢使用一個單一的查詢。 – VMai 2014-09-02 20:52:07

+0

如果MySQL以這種方式工作,生活會非常美好。它只會取第一個數組的值。您的查詢中需要一個OR NOT IN(或多個)。 – 2014-09-02 20:53:37

回答

2

你不需要在這裏報價:

WHERE id NOT IN('".$exclude."') 
       ^  ^

而且你可以在一個查詢中得到相同的結果:

SELECT 
    id, 
    firstName, 
    lastName 
FROM members 
WHERE id NOT IN 
    (SELECT 
    member_id 
    FROM appointments 
    WHERE joint_id = '$jointid') 
+0

@doublesharp我不同意你的觀點,這個內爆包裹在用'1,2,3'結尾的引號中,你可以很容易地試一下[這裏](http://sandbox.onlinephpfunctions.com/code/76af87fa6a4c8c2f59c88e2b05460d204fa595e2 )。 – 2014-09-02 21:01:10

+0

當我將第二個SELECT語句添加到NOT IN子句中時,它起作用。謝謝!! – 2014-09-02 21:06:04

+0

@EndeNeu - 你是對的,我誤解了代碼,對不起! – doublesharp 2014-09-02 21:10:51

3

你報你的IDS排除,所以你已經變成那個逗號分隔的數字列表在單片字符串:

WHERE id NOT IN ('1,2,3,4') 
WHERE id NOT IN (1,2,3,4) 

以上兩種是兩個完全不同的語句。一個是單個字符串,這使得它等於id <> '1,2,3,4'。另一個是IN操作的4個數字的列表。

+0

這不是問題,爆炸將解釋這一點。 – doublesharp 2014-09-02 20:56:27

+0

什麼爆炸?那裏只有一個內疚。 while循環有什麼問題?縮進是廢話,但循環本身是有效的。 – 2014-09-02 20:57:46

+0

對不起,我的意思是內爆 - 它使用'',''爲膠水。 – doublesharp 2014-09-02 20:58:10