为了让您了解我在这里试图实现的目标,我设置了一个非常简单的邮件系统,用户可以在其中"标记"接收或发送的邮件(以便稍后阅读或保存等…)。这个系统非常简单,与下面的表设计相似,请注意,我已经删除了一些不相关的列:
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 &或send_account &sender_* *并根据用户ID引用它?
有没有人能帮我一下,目前我检索结果的方式如下:
$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