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

时间:2014-09-02 20:50:19

标签: php mysql arrays notin

所以我有一个查询来创建一个ID数组,我不想将其包含在填充我的选择列表的数据中。选择列表和排除ID的数组都是从mysql数据库中提取的。我遇到的问题是,当我回显$ exclude时,它在逗号分隔列表(1,2,3)中正确显示。但是,当我尝试在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> 

2 个答案:

答案 0 :(得分:4)

你不需要这里的引用:

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

您也可以在一个查询中获得相同的结果:

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

答案 1 :(得分: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个数字列表。