Php Mysql NOT IN数组只影响数组中的第一个结果

问题描述:

所以我有一个查询来创建一个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

你不需要在这里报价:

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

你报你的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