SQL PHP:如果存在于另一个表中,则选择虚拟列

时间:2015-01-29 20:33:15

标签: php mysql

我正在我的网站上制作一个通知小部件,我正在尝试将其设置为如果通知被标记为已读,则该通知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查询的能力而荒谬

1 个答案:

答案 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
 }