SELECT QUERY结构

时间:2012-10-01 10:59:23

标签: php mysql sql

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

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 个答案:

答案 0 :(得分: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')
  ...

答案 1 :(得分: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').....

答案 2 :(得分: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') 

答案 3 :(得分: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表的结构也不同,因此每行只包含一个日期。