Mysql - 如何连接 2 个表并仅在满足条件时保留匹配行

标签 mysql join replace

我有一个周期性事件日历,允许人们注册事件。 我在以下结构中有 2 个表 dynamic_eventsrecurring_events:

dynamic events
id (int)
date (date)
time (time)
title (varchar[255])
desc (text)
max_attendees (int)
is_overwrite (tinyint[1])

recurring events
id (int)
day_of_week (int)
time (time)
title (varchar[255])
desc (text)

每当重复发生的事件更新时,我都会使其动态化以唯一标识它 attendee 表。它现在的工作方式是查询当天的所有动态事件,然后查询当天的所有重复事件,并将数组传递给 PHP 函数,如果日期和时间匹配,则用动态事件替换任何重复事件并且 is_overwrite 等于 1。基本上意味着该日期和时间的重复事件已更新以允许人们注册。这行得通,但我想知道如果没有带有某种左连接的 PHP,这是否可行。在保留所有其他事件的同时替换具有动态对应项的重复表中的任何行以覆盖它?我只是不确定如何着手,正在寻找朝正确方向迈出的一步。希望我的解释不会太困惑。

最佳答案

是的,这是可以做到的。使用左连接调用 ifnull() 进行覆盖:

select
    ifnull(d.time, r.time) as time,
    ifnull(d.title, r.title) as title,
    ifnull(d.desc, r.desc) as desc
from recurring_events r
left join dynamjc_events d on dayofweek(d.date) = r.day_of_week
    and d.time = r.time

请注意,“覆盖”并非完全可行,因为列不同,但是您应该从任一表中选择您需要的任何列,如果没有匹配项,对于动态事件它们将为空。

关于Mysql - 如何连接 2 个表并仅在满足条件时保留匹配行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13923420/

相关文章:

search - vim、ed 或 sed 对给定文件进行多次搜索和替换

php - 用 str_ireplace 替换不区分大小写的字符串不起作用

mysql - 如何选择数据并获得层次结构结果

mysql - 插入多行、简单循环还是MySQL存储过程?

mysql - [MySQL] : select UNIQUE w/join

php - Mysql表连接2个表

ruby - 同时替换2个字符串?

mysql - 将 postgresql 查询转换为适用于 mysql 的查询

mysql - MsSQL 到 MySQL 的迁移

sql - JOIN 语句不适用于 where 子句