0

我正在从第 3 方数据源下载数据,其中一个字段是联系人的生日,可能为空白,即 0000-00-00。我的用户可以选择输入联系人的生日,我认为这是在单独的表中,因为如果我更新了原始表,每当用户使用原始数据源刷新时,所有更新的生日都会被删除。

我现在想查找未来 30 天内的所有生日。这适用于第一个(原始数据源)表:

    $BirthdayResults = mysql_query("SELECT * FROM Connections WHERE UserID='$UserID' AND (DATE_FORMAT(ContactBirthday, '%m%d') BETWEEN '$sCurrentDate' AND '$sDateOneMonthAdded')");    

所以我想知道 mySQL 是否可以处理这种类型的逻辑:

$BirthdayResults = mysql_query("SELECT * FROM Connections WHERE UserID='$UserID'... 
 AND IF ContactBirthday IN Connections = '0000-00-00' 
 CHECK OTHER_BIRTHDAY_TABLE AND USE THIS BIRTHDAY IF IT EXISTS 
 WHERE Connections.ContactID=OTHER_BIRTHDAY_TABLE.ContactID
4

1 回答 1

1
SELECT *
FROM   Connections LEFT JOIN OTHER_BIRTHDAY_TABLE USING(ContactID)
WHERE  UserID='$UserID'
   AND DATE_FORMAT(
         IF(
           Connections.ContactBirthday = '0000-00-00',
           OTHER_BIRTHDAY_TABLE.BIRTHDAY,
           Connections.ContactBirthday
         ),
         '%m%d'
       ) BETWEEN '$sCurrentDate' AND '$sDateOneMonthAdded'

但是,NULL会比0000-00-00在这种情况下更合适;在这种情况下,可以使用 MySQL 的IFNULL()orCOALESCE()函数:

       DATE_FORMAT(
         IFNULL(Connections.ContactBirthday, OTHER_BIRTHDAY_TABLE.BIRTHDAY),
         '%m%d'
       )
于 2012-10-13T10:27:38.843 回答