我有一个我希望缩短的查询。
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等。
这个查询很大,有没有办法缩短它。这适用于日历类型设计,它正在寻找不同日期的数据条目。因此,如果日期匹配,则会将其发布到日历中。
答案 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
表的结构也不同,因此每行只包含一个日期。