Исключение строки в базе данных с!= В запросе PDO

Я пытаюсь исключить определенные строки с помощью запроса PDO, но он не возвращает правильное значение, и я не вижу своей ошибки, может быть, некоторые из вас могут мне помочь.

Это первый запрос, который работает.

$objGetRecievedChat = $objDatabaseMessages->prepare('SELECT * FROM messages WHERE recieverid = :recieverid GROUP BY chatid');

Теперь я хочу исключить chatidэто то, что я получаю из этого запроса.

foreach ($getRecievedChatFtch as $chatid) {
 echo $chatid['chatid'] . '<BR>';
}

Когда я повторяю вышеизложенное, я получаю следующий результат:

20920
81586

Что правильно, я хочу исключить эти два значения, поэтому я выполняю следующий запрос:

  $objGetSendChat = $objDatabaseMessages->prepare('SELECT * FROM messages WHERE ownerid = :ownerid AND chatid != :chatid GROUP BY chatid');

foreach ($getSendChat as $key ) {
 echo $key['chatid'] . '<BR>';
}

Но когда я повторяю вышеизложенное, я получаю следующие значения

44495
20920
44495

это значение 44495 это правильно, хотя мне нужно только один раз (вот почему я GROUP BY chatid) Но ценность 20920 это одно из значений, которые мне нужно исключить.

Кто-нибудь знает, что я делаю не так?

Заранее спасибо!

Весь код:

//Voor de berichten die je hebt ontvangen.
$objGetRecievedChat = $objDatabaseMessages->prepare('SELECT * FROM messages WHERE recieverid = :recieverid GROUP BY chatid');
$objGetRecievedChat->bindParam('recieverid', $member_id);
$objGetRecievedChat->execute();

$getRecievedChatFtch = $objGetRecievedChat->fetchAll(PDO::FETCH_ASSOC);

//Dit is voor verzonden berichten.
foreach ($getRecievedChatFtch as $chatid) {
  echo $chatid['chatid'] . '<BR>';

  $objGetSendChat = $objDatabaseMessages->prepare('SELECT * FROM messages WHERE ownerid = :ownerid AND chatid NOT IN(:chatid) GROUP BY chatid');
  $objGetSendChat->bindParam('ownerid', $member_id);
  $objGetSendChat->bindParam('chatid', $chatid['chatid']);

  $objGetSendChat->execute();
  $getSendChat = $objGetSendChat->fetchAll(PDO::FETCH_ASSOC);

  foreach ($getSendChat as $key) {
    echo $key['chatid'] . '<BR>';
  }
}

2 ответа

Измените запрос на catid NOT IN (xxxx,xxxx).

Вы делаете это неправильно: в цикле foreach вы получаете ВСЕ строки, НО текущую. Вы должны поставить запрос из foreach и использовать WHERE IN

//Voor de berichten die je hebt ontvangen.
$objGetRecievedChat = $objDatabaseMessages->prepare('SELECT * FROM messages WHERE recieverid = :recieverid GROUP BY chatid');
$objGetRecievedChat->bindParam('recieverid', $member_id);
$objGetRecievedChat->execute();

$getRecievedChatFtch = $objGetRecievedChat->fetchAll(PDO::FETCH_ASSOC);

//Dit is voor verzonden berichten.
$chatids = array();
foreach ($getRecievedChatFtch as $chatid) {
  echo $chatid['chatid'] . '<BR>';
  $chatids = $chatid['chatid'];
}

$placeholders = implode(',', array_fill('?', count($chatids)));
$objGetSendChat = $objDatabaseMessages->prepare('SELECT * FROM messages WHERE ownerid = ? AND chatid NOT IN(' . $placeholders . ') GROUP BY chatid');

$objGetSendChat->execute(array_merge(array($ownerid, $chatids)));
$getSendChat = $objGetSendChat->fetchAll(PDO::FETCH_ASSOC);

foreach ($getSendChat as $key) {
  echo $key['chatid'] . '<BR>';
}

Более или менее (потому что я не люблю использовать WHERE IN с подготовленным заявлением. Вы обычно можете избежать их с JOIN,


$objGetSendChat = ...

Пока вы используете $getSendChat в foreach,

Поэтому я чувствую, что нам не хватает некоторого кода, содержащего ошибку.

Плюс, вы делаете GROUP BY chatid и вы получите 44495 дважды в результате, поэтому результат не может быть равен запросу.

Другие вопросы по тегам