2012-10-13 81 views
0

我正在從第三方數據源下載數據,而一個字段是聯繫人的生日,可能爲空,即0000-00-00。我的用戶可以選擇輸入聯繫人的生日,如果他們選擇的話,我認爲這是在單獨的表中,因爲如果我更新了原始表,每當用戶使用原始數據源刷新時,所有更新的生日都將被刪除。需要mySQL查詢來檢查另一個表中更新的生日

我現在想查找未來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 
+0

如陳述[引進](http://www.php.net/manual/en/intro.mysql.php)到PHP有關'mysql_ *'函數的手冊章節:*不推薦使用此擴展名編寫新代碼。相反,無論是[mysqli](http://www.php.net/manual/en/book.mysqli.php)還是[PDO_MySQL](http://www.php.net/manual/en/ref.pdo應該使用-mysql.php)擴展名。請參閱[MySQL API概述](http://www.php.net/manual/en/mysqlinfo.api.choosing.php)以獲得進一步的幫助,同時選擇MySQL API。* – eggyal

回答

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()COALESCE()功能代替:

 DATE_FORMAT(
     IFNULL(Connections.ContactBirthday, OTHER_BIRTHDAY_TABLE.BIRTHDAY), 
     '%m%d' 
     ) 
+0

super。謝謝eggyal :) – Jeremy