我正在我的网站上制作一个通知小部件,我正在尝试将其设置为如果通知被标记为已读,则该通知ID将与其用户名一起插入另一个表(表'b')这样它就被标记为已读。现在我遇到的问题是显示所有通知(无论是已读还是未读)我不知道如何指示通知是否存在于辅助表中
当前的SQL查询如下:
$qry = "SELECT * FROM notifications WHERE (notif_recipient = '$user') ORDER BY notif_date DESC";
我想要做的是使查询更加复杂,以便指示另一个表中是否存在通知,所以有以下几点:
$qry = "SELECT notif_id,notif_message,(CASE SELECT notif_is_read AS '1' WHERE notif_id.notifications = notif_id.notifications_read ELSE SELECT notif_is_read AS '0') FROM notifications WHERE (notif_recipient = '$user') ORDER BY notif_date DESC";
这样的事情是可能的,还是因为我缺乏编写SQL查询的能力而荒谬
答案 0 :(得分:1)
正如Marc B建议的那样,我决定使用LEFT JOIN来识别辅助表中当前存在哪些消息,我的查询看起来像这样:
$qrytest = "SELECT notifications.notif_id,notifications.notif_message,notifications.notif_flag,notifications.notif_poster,notifications.notif_date,notifications_read.notif_read_count FROM notifications LEFT JOIN notifications_read ON notifications.notif_id=notifications_read.notif_id WHERE ((notif_recipient = 'all') OR (notif_recipient = '$id')) ORDER BY notif_date DESC,notif_flag DESC";
这反过来将返回我的主表(通知)的结果,如果我的辅助表中存在相同的通知ID,我决定回显该表的ID计数,如果该条目不存在它将只返回null
$exists = $row['notif_read_count'];
if ($exists !== ''){
// When NOT returning as null do something
} else {
// When exist returns as null do something
}