I have a query I am hoping to shorten.
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')
and so on for date 1-7 .
This query is massive, is there any way of shortening it. This is for a calender type design where it is looking for data entries that are in different days. So if a date matches then it will post it to the calendar.
You can use the IN
predicate instead of these OR
's like so:
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')
...
maybe you will use 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')
Try this,
SELECT date1, date2, date3, date4, date5, date6, date7 FROM dates_db
WHERE date1 IN ('$date1','$date2',...) OR date2 IN('$date1','$date2',...)....
Or,
$dates = $date1.",".$date2.",".$date3.",".........;
SELECT date1, date2, date3, date4, date5, date6, date7 FROM dates_db
WHERE date1 IN ('$dates') OR date2 IN('$dates').....
Here is an option that involves only listing the $date
variables once. Some modification may be needed for MySQL syntax:
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;
In an ideal world, your dates_db
table would also be structured differently, so that each row only contains one date.