Чтобы дать вам представление о том, чего я пытаюсь достичь, я настроил очень простую почтовую систему, в которой пользователи могут «отмечать» входящую или исходящую почту (чтобы прочитать позже или сохранить и т. Д.). Система ОЧЕНЬ проста и работает с дизайном таблицы, аналогичным приведенному ниже, обратите внимание, что я удалил некоторые столбцы, которые здесь не актуальны:
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
Из приведенных выше примеров, если мы получаем помеченные сообщения для идентификатора пользователя 10
запрос будет показывать идентификаторы сообщений 1, 3
,
Как вы можете, вероятно, сработать — я могу легко получить помеченные сообщения, если просматривать только полученные или отправленные сообщения отдельно. Хотя проблема здесь в том, что я хотел бы показать все «помеченные» сообщения в одной папке для каждого пользователя, и, очевидно, для этого необходимо определить, какой пользователь пометил сообщение, или подключив rece_account. & rece_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";
Вам просто нужно немного логической логики в вашем 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
Других решений пока нет …