php - 带条件的 SQL 语句

标签 php mysql sql

我有以下查询:

SELECT a.name_f, a.uid, a.name_l, a.profile_pic, b.position FROM users a groups_members b, WHERE a.uid = b.userid AND b.group_id=$group_var

这非常有用,可以返回所有用户的信息以及他们在我想调用的任何特定群组中的位置。当一个小组参加一个事件时,我想在那个事件页面上调用上面的函数,还有一个额外的语句来查找该用户是否已确认。所以我运行以下查询:

SELECT a.name_f, a.uid, a.name_l, a.profile_pic, b.position, c.confirmed FROM users a groups_members b, event_users c WHERE a.uid = b.userid AND b.group_id ='$group_var' and c.event_id ='$event_var' and a.uid = c.userid

这也很好用,但这就是我的问题所在。假设某个组创建了一个事件,随后所有用户都被转储到 event_users 表中。我的第二个查询仍然有效,并显示该组中的每个用户以及他或她的确认设置,但是当新用户加入该组并选择他或她的位置时,我的第二个查询中不会返回该新用户,因此,显示所有用户及其位置的事件不考虑事件创建后添加的任何新用户。

我希望这听起来不会太困惑。这是我的表格:

event_users || id, event_id, userid, confirmed    

groups_members || id, userid, group_id, position

users || uid, name_f, name_l, profile

我的问题是我怎样才能基本上收集所有当前组成员,如果他们已经输入到 event_users 表中,他们的确认状态是什么。我不想在我的群组页面上运行查询来考虑新用户并将他们放入群组拥有的任何事件中

最佳答案

使用左连接:

    SELECT 
      a.name_f, a.uid, a.name_l, a.profile_pic, b.position, c.confirmed 
    FROM users a 
    JOIN groups_members b on a.uid = b.userid
    LEFT JOIN event_users c on a.uid = c.userid
    WHERE b.group_id='$group_var' and c.event_id ='$event_var'

如果 event_users 表中没有对应的记录,您将获得 NULL 作为 c.confirmed 的值。您可以使用 coalesce() 函数将默认值放在那里:

     coalesce(c.confirmed, 0)

     coalesce(c.confirmed, 'not subscribed yet')

关于php - 带条件的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10321721/

相关文章:

Php 完全没有从数据库中提取任何内容

java - 设置 Apache Mahout 以使用 MySql

mysql - 即使 GTID_MODE=ON 也会进行匿名交易

php - 在 PHP 搜索之前隐藏完整表格

c# - 从数据库查询返回一些值

php - ErrorException + 取消链接 + 资源暂时不可用 + Laravel 5.5

php - 在 jquery 中通过 javascript 获取 json 数组

php - 保存在 Opencart 模块后,我的 HTML 内容消失了

Java JTDS 到 SQL Server 2000

mysql - 获取用户的 SQL 查询