0

我有一个希望缩短的查询。

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 。

这个查询很大,有什么办法可以缩短它。这适用于日历类型设计,它正在寻找不同日期的数据条目。因此,如果日期匹配,则会将其发布到日历中。

4

4 回答 4

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')
  ...
于 2012-10-01T11:00:51.303 回答
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').....
于 2012-10-01T11:03:04.487 回答
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') 
于 2012-10-01T11:02:13.673 回答
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表格的结构也会有所不同,因此每一行仅包含一个日期。

于 2012-10-01T11:05:48.493 回答