2012-10-01 142 views
0

我有一個查詢,我希望縮短。SELECT QUERY結構

SELECT date1, date2, date3, date4, date5, date6, date7 FROM dates_db 
WHERE date1 =('$date1') OR date1 =('$date2') OR date1=('$date3') 
OR date1=('$date4') OR date1=('$date5') OR date1=('$date6') 
OR date1=('$date7') OR date2 =('$date1') OR date2 =('$date2') 
OR date2=('$date3') OR date2=('$date4') OR date2=('$date5') 
OR date2=('$date6') OR date2=('$date7') OR date3 =('$date1') 
OR date3 =('$date2')OR date3=('$date3') OR date3=('$date4') 
OR date3=('$date5') OR date3=('$date6') OR date3=('$date7') 

等等日期1-7。

這個查詢很龐大,有沒有什麼方法可以縮短它。這是針對日曆類型設計,它正在查找處於不同日子的數據條目。所以如果日期匹配,它會將其發佈到日曆。

+5

你應該規範你的數據庫,以避免做這個瘋狂的東西。 – JvdBerg

+0

實際的數據庫是holiday_db,並且有很多像名字等字段。只是包含7個日期供人過關工作。 – Brobina

+0

我不確定你想在這裏實現什麼,但即使你使用IN來查找查詢內某個範圍內的值,這看起來效率也不高。您的dates_db純粹是在您希望使用的範圍內的日期內填充的?如果是這樣,你可以更好地查看諸如strftime之類的php函數而不是有日期表嗎? – codepuppy

回答

3

你可以像這樣使用IN謂詞代替的這些OR

SELECT date1, date2, date3, date4, date5, date6, date7 
FROM dates_db 
WHERE date1 IN ('$date1','$date2','$date3','$date4','$date5','$date6','$date7') 
    OR date2 IN ('$date1','$date2','$date3','$date4','$date5','$date6','$date7') 
    OR date3 IN ('$date1','$date2','$date3','$date4','$date5','$date6','$date7') 
    ... 
0

也許你會使用IN

SELECT... 
FROM... 
WHERE date1 IN ('$date1','$date2','$date3','$date4','$date5','$date6','$date7') OR 
     date2 IN ('$date1','$date2','$date3','$date4','$date5','$date6','$date7') OR 
     date3 IN ('$date1','$date2','$date3','$date4','$date5','$date6','$date7') 
2

試試這個,

SELECT date1, date2, date3, date4, date5, date6, date7 FROM dates_db 
WHERE date1 IN ('$date1','$date2',...) OR date2 IN('$date1','$date2',...).... 

或者,

$dates = $date1.",".$date2.",".$date3.",".........; 
SELECT date1, date2, date3, date4, date5, date6, date7 FROM dates_db 
WHERE date1 IN ('$dates') OR date2 IN('$dates')..... 
0

這是一個選項,只涉及到$date變量一次。可能需要做一些修改MySQL的語法:

WITH search_dates (date) as (
    values ('$date1'),('$date2'),... 
) 
SELECT DISTINCT date1, date2, date3, date4, date5, date6, date7 FROM dates_db 
    INNER JOIN search_dates ON 
     date1 = date OR 
     date2 = date OR ... 
     date7 = date; 

在一個理想的世界裏,你dates_db表也將不同的結構,使每一行只包含一個日期。