2013-09-24 4 views
0

У меня есть эта система PM, где пользователи могут писать друг другу. Когда я показываю имеющийся РМ у меня в таблице MySQL deleted_sender и deleted_receiverPHP - Mysql select AND OR

Если deleted_sender является 1, то человек, который послал PM не должен быть в состоянии видеть его в списке. Если deleted_receiver равен 1, то лицо, получившее ПМ, не сможет его увидеть.

Вопрос в том, как я могу сделать это с помощью запроса mysql? В настоящее время у меня есть следующее:

$r=mysql_query(" 
     SELECT * FROM private_messages 
     WHERE 
      sender_id='".$userdata['id']."' 
     OR 
      receiver_id='".$userdata['id']."' 
     AND 
      (deleted_receiver='0' OR deleted_sender='0')"); 

Хотя это показывает только PM как у отправителя, так и у получателя.

+2

Я не уверен, почему вы хотите написать одиночный запрос, см. Как отправитель, так и получатель - отдельная сущность, и вы хотите показать результат только одному из них. если он удален для отправителя, то не показывать отправителю шоу на приемник. поэтому ставьте только одно условие, то есть либо для отправителя, либо для приемника. –

+0

проверить, является ли '$ userdata ['id']' отправителем, затем запрос с 'deleted_sender = 0' наоборот для получателя –

ответ

3

Хорошо, подумайте о том, что вы пытаетесь сделать: вы хотите показать его отправителю, если отправитель его не удалил, и наоборот для получателя.

Другими словами, вы хотите показать, если
(отправитель = пользователь и отправитель не удаляется) ИЛИ (приемник = пользователь и приемник не удалил)

Из этого вы строите свой запрос:

... WHERE (`sender_id`={$userdata['id']} AND `deleted_sender`=0) 
     OR (`receiver_id`={$userdata['id']} AND `deleted_receiver`=0) 
0
$r = mysql_query(
"SELECT * FROM private_messages 
WHERE (sender_id='".$userdata['id']."' AND deleted_sender='0') 
OR (receiver_id='".$userdata['id']."' AND deleted_receiver='0')" 
); 

Кроме того, это может закончиться недействительными результатами, так как вы не знаете, то если ваш результат о отправить или получить ... зависит от дисплея вы хотите. Но вам, возможно, придется сделать два разных запроса.