Поэтому у меня есть запрос на создание массива идентификаторов, который я не хочу включать в данные, которые заполняют мой список выбора. Как список выбора, так и массив исключенных идентификаторов извлекаются из базы данных 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'
. Другой – список из 4 чисел для операции IN
.