2014-09-02 6 views
0

Итак, у меня есть запрос на создание массива 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

+0

Жизнь была бы такой большой, если бы MySQL работал именно так. Он будет принимать только первое значение массива. Вам понадобится OR NOT IN (или несколько в этом отношении) в вашем запросе. –

ответ

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 Я не согласен с вами, implode завернут в кавычки, заканчивая «1,2,3», вы можете легко попробовать [здесь] (http://sandbox.onlinephpfunctions.com/code/76af87fa6a4c8c2f59c88e2b05460d204fa595e2). –

+0

Это сработало, когда я только что добавил вторую инструкцию SELECT в предложение NOT IN. Благодаря!! –

+0

@EndeNeu - вы правы, я неправильно читаю код, извините! – doublesharp

3

Вы процитировали ваши исключающие IDS, поэтому вы включили, что список разделенных запятыми чисел в монолитную строку:

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

выше две совершенно разные заявления. Один - это одна строка, которая делает ее эквивалентной id <> '1,2,3,4'. Другой - это список из 4 чисел для операции IN.

+0

Это не проблема, это объяснит взрыв. – doublesharp

+0

что взорвалось? Там есть только взрыв. И что случилось с циклом while? Отступы - это дерьмо, но сам цикл является действительным. –

+0

Извините, я имел в виду implode - он использует '', ''для клея. – doublesharp