userovich
@userovich

Как правильно сформулировать запрос mysql где нужно много AND?

Всем привет!
Мне нужно сформулировать вот такой запрос к базе:
SELECT * FROM `messages` WHERE `id_add` = '73' AND `id_to` = '68' AND `id_add_pac` = '68' AND `id_to_pac` = '73'

Вопрос звучит так:
взять все сообщения с таблицы messages, где id_add (id врача) который добавил запись = 73 и отправил он его именно мне id_to = 68 (id пациента) и все сообщения которые отправил ему я id_add_pac = 68 и все те, которые отправил именно ему id_to_pac = 73.

Как не странно, такой запрос не работает, так что вопрос для знатоков, как это правильно сформулировать?

Всем добра)
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Правильно не работает. Вы ищете сообщения которые одновременно были отправлены в обе стороны. А надо искать те, которые было от врача пациенту плюс те, которые были от пациента врачу.
SELECT *
  FROM `messages` 
  WHERE `id_add` = :doctorId AND `id_to` = :patientId 
UNION SELECT *
  FROM `messages` 
  WHERE `id_add_pac` = :patientId AND `id_to_pac` = :doctorId
Ответ написан
Комментировать
irishmann
@irishmann
Научись пользоваться дебаггером
Несколько замечаний исходя из вашего кода:
  • Откажитесь от mysql, хотя бы в пользу mysqli, первый устарел.
  • Никогда не делайте запросы таким образом.
  • Научитесь пользоваться подготовленными запросами.
  • Очень не рекомендую обращаться к глобальным переменным напрямую

Код автора
<?php
include("bd.php");
$res=mysql_query("SELECT * FROM `messages` WHERE `id_add` = '". $_COOKIE['doc_id'] . "' AND `id_to` = '". $_COOKIE['user_id'] . "' AND `id_add_pac` = '". $_COOKIE['user_id'] . "' AND `id_to_pac` = '". $_COOKIE['doc_id'] . "'  ORDER BY `id`");
while($d=mysql_fetch_array($res))
{	
  echo "<b><font color='white'>".$d['login'].":&nbsp;</font></b>".$d['message']."<br>";
}
?>


Ничего в вашем запросе не нужно менять, в данном случае это ненужная оптимизация.
Ответ написан
$result = MessagesModel::find()
->andWhere([`id_add` => 73])
->andWhere([`id_to` => 68])
->andWhere([`id_add_pac` => 68])
и т.д.

решение в лоб.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы