所以我有一个查询来创建一个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>
您不需要这里的报价:
WHERE id NOT IN('".$exclude."')
^ ^
您也可以在一个查询中获得相同的结果:
SELECT
id,
firstName,
lastName
FROM members
WHERE id NOT IN
(SELECT
member_id
FROM appointments
WHERE joint_id = '$jointid')
您引用了排除IDS,因此您将逗号分隔的数字列表变成了一个整体字符串:
WHERE id NOT IN ('1,2,3,4')
WHERE id NOT IN (1,2,3,4)
以上两种说法完全不同。一个是单个字符串,这使它等效于id <> '1,2,3,4'
。另一个是用于IN
操作的4个数字的列表。