Reputation: 251
I have the following query
SELECT *
FROM tbl_events AS event
LEFT JOIN tbl_business_events AS bevent
ON event.event_id = bevent.event_id
LEFT JOIN tbl_business_sector AS bsec
ON event.event_id = bsec.event_id
LEFT JOIN tbl_sectors AS sector
ON bsec.sector_id = sector.sector_id
LEFT JOIN tbl_event_location AS eloc
ON event.event_id = eloc.event_id
LEFT JOIN tbl_locations AS location
ON location.location_id = eloc.location_id
WHERE event.event_type = 1
which i use to pull out all the details of my event listings, this works but i now want to pull out the events profile picture from another table tbl_event_images. This table stores all the events images but has a field called is_profile_picture which determins if it is the profile pic or not (value is 0 for not and 1 if the image is the profile pic)
so i tried the following query to grab the event profile picture as well as the rest of the information with the following query
SELECT *
FROM tbl_events AS event
LEFT JOIN tbl_event_images AS eIMG
ON event.event_id = eIMG.event_id
LEFT JOIN tbl_business_events AS bevent
ON event.event_id = bevent.event_id
LEFT JOIN tbl_business_sector AS bsec
ON event.event_id = bsec.event_id
LEFT JOIN tbl_sectors AS sector
ON bsec.sector_id = sector.sector_id
LEFT JOIN tbl_event_location AS eloc
ON event.event_id = eloc.event_id
LEFT JOIN tbl_locations AS location
ON location.location_id = eloc.location_id
WHERE event.event_type =1
but this query returns a new row for each photo the event has in that table.
so i then tried to add another where clause to the above
AND eIMG.is_profile_picture =1
but because not every listing has photos let alone a profile picture the above query only returns the events that have a profile picture.
how can i return 1 row for each event regardless if they have a profile pic or not? if they do then it will add the name of the image if it doesnt it sets it to NULL
Thanks Luke
Upvotes: 1
Views: 86
Reputation: 34774
Instead of using WHERE
criteria add the is_profile_picture
condition to your JOIN
criteria:
SELECT *
FROM tbl_events AS event
LEFT JOIN tbl_event_images AS eIMG
ON event.event_id = eIMG.event_id
AND eIMG.is_profile_picture =1
LEFT JOIN tbl_business_events AS bevent
ON event.event_id = bevent.event_id
LEFT JOIN tbl_business_sector AS bsec
ON event.event_id = bsec.event_id
LEFT JOIN tbl_sectors AS sector
ON bsec.sector_id = sector.sector_id
LEFT JOIN tbl_event_location AS eloc
ON event.event_id = eloc.event_id
LEFT JOIN tbl_locations AS location
ON location.location_id = eloc.location_id
WHERE event.event_type =1
WHERE
filters all results, and in this case effectively negates your use of LEFT JOIN
. Adding to the JOIN
criteria itself means only some pictures will join, but all the results of your original query will still be returned.
Upvotes: 1
Reputation: 901
Try this
SELECT *
FROM tbl_events AS event
LEFT JOIN tbl_event_images AS eIMG ( ON event.event_id = eIMG.event_id AND eIMG.is_profile_picture = 1 )
LEFT JOIN tbl_business_events AS bevent ON event.event_id = bevent.event_id
LEFT JOIN tbl_business_sector AS bsec ON event.event_id = bsec.event_id
LEFT JOIN tbl_sectors AS sector ON bsec.sector_id = sector.sector_id
LEFT JOIN tbl_event_location AS eloc ON event.event_id = eloc.event_id
LEFT JOIN tbl_locations AS location ON location.location_id = eloc.location_id
WHERE event.event_type =1
Upvotes: 1