I have this query:
$events = db_query("SELECT e.name, e.event_date, e.time, e.data, e.picture, e.event_type, v.latitude, v.longitude, v.address, v.name as vname
FROM events e INNER JOIN venues v ON e.vid=v.vid
WHERE FIND_IN_SET('".$q."', event_type)>0
AND e.event_date > (SELECT DATE_SUB(curdate(), INTERVAL 1 DAY))
GROUP BY e.name");
And it all works fine except the date selection. I would like this query to list only items that are of the day before or in the future but at the moment it lists all items. Any pointers as to where I’m going wrong?
EDIT: If I remove the first “WHERE” clause then the query executes correctly and only returns the items with a date in the future.
The whole query looks like this:
SELECT e.name, e.event_date, e.time, e.data, e.picture, e.event_type, v.latitude, v.longitude, v.address, v.name as vname
FROM events e INNER JOIN venues v ON e.vid=v.vid
WHERE FIND_IN_SET('liveSports', event_type)>0
OR FIND_IN_SET('dancing', event_type)>0
OR FIND_IN_SET('drinksDeals', event_type)>0
OR FIND_IN_SET('pubQuiz', event_type)>0
OR FIND_IN_SET('boardGames', event_type)>0
OR FIND_IN_SET('fussball', event_type)>0
OR FIND_IN_SET('speedDating', event_type)>0
OR FIND_IN_SET('pool', event_type)>0
OR FIND_IN_SET('liveMusic', event_type)>0
OR FIND_IN_SET('foodDeals', e.event_type)>0
AND e.event_date >= (SELECT DATE_SUB(curdate(), INTERVAL 1 DAY))
GROUP BY e.name
I have a feeling that the issue might be with the amount of ORing going on here. If I reduce the size of the query in that way, the results are returned as expected.
Thanks,
You were very close, but I bet you wanted to OR all the FIND_IN_SETs together, THEN check the date on all of them. I added parens. Also, you didn’t need the subquery (SELECT…) arround the DATE_SUB.