2016-09-07 3 views
0

Чтобы дать вам представление о том, чего я пытаюсь достичь здесь, я создал очень простую почтовую систему, в которой пользователи могут «Звезда» входящей или исходящей почты (читать позже или сохранять и т. Д.). Система очень проста и работает с аналогичной конструкцией табличной ниже Пожалуйста, обратите внимание, что я удалил некоторые столбцы, которые не имеют отношения здесь:Выберите из MySQL, соединив два столбца вместе?

Random Digit 
User ID of Recipient 
User ID of Sender 
Message 
If recipient has starred message (0 for no, 1 for yes) 
If sender has starred the message (0 for no, 1 for yes) 

mail_id | recip_account | sender_account | message | recip_starred | sender_starred 
    1   5     10    Hello   0     1 
    2   10     5   A Reply   0     1 
    3   10    20    Test   1     0 
    4   15    20    Message  1     1 

Из приведенных выше примеров, если мы получаем помеченные сообщения для ID пользователя 10, в запросе будет отображаться сообщение ID 1, 3. Как вы, вероятно, можете работать - я могу легко получать помеченные сообщения, если вы просматриваете только полученные или отправленные сообщения отдельно. Хотя здесь проблема, я хотел бы показать все «помеченные» сообщения в одной папке для каждого пользователя, и, очевидно, это требует разработки того, какой пользователь выделил сообщение, или путем подключения recip_account & recip_starred ИЛИ sender_account & sender_starred и ссылка что против идентификатора пользователя?

Может кто-нибудь помочь мне здесь, в настоящее время так, как я извлечение результатов заключается в следующем:

$sql2 = "SELECT * FROM `ap_mail_system` WHERE `recip_account` = '$user_id' OR `sender_account` = '$user_id' ORDER BY `sent_date` DESC LIMIT 0, 12"; 
+0

'where ... and recip_starred = 1'? –

+0

Да, это сработало бы, если бы я показывал сообщения SENT или ПОЛУЧИЛ сообщения отдельно, но система не смогла бы сказать, кто играл главную роль в сообщении, если бы я показывал как отправленные, так и полученные сообщения вместе, и это моя проблема. – Snappysites

ответ

1

Вам просто нужно немного булевой логики в вашем предложении WHERE. Попытка:

SELECT * FROM `ap_mail_system` WHERE (`recip_account` = '$user_id' AND `recip_starred` = 1) OR (`sender_account` = '$user_id' AND `sender_starred` = 1) ORDER BY `sent_date` DESC LIMIT 0, 12 
+0

Точно то, что я искал, спасибо большое! – Snappysites