0

サードパーティのデータソースからデータをダウンロードしていますが、1 つのフィールドが連絡先の誕生日で、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()またはCOALESCE()関数を使用できます。

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