I am new-ish to SQL queries and I'm trying to write a query properly which displays an event, its information, and the categories to which it belongs.
I want a result which looks like this:
TITLE: Band Battle!
WHEN: 7:00pm
VENUE: Parkland School
CATEGORIES: Music, School, Public
In my example, I have an event with three categories and I'm having trouble displaying this properly. I can get it to display all information including ONE category, or repeat three times displaying one category for EACH repeated listing. I also notice that if I have the same row in two tables, it'll only display the one it loads last. Is there a way I can tell it which row cell to load?
I've done this successfully in the past by having multiple SQL queries, but I know that's not proper. I'd have a query which displays all items, and each time one displays, have another query go out and get associated data, and then another for that data, etc. I'd run several hundred queries on each page load!
I'm sure that's not the best approach, so I'm trying to write one query to handle everything. I think JOINS are the way to go, specifically inner joins.
The information I need to display is spread across a few tables: an Events table, which has info regarding the event, including IDs associating it to the Venues table and EventCategories list.
Here's my SQL query:
from
`Events` e
inner join
`EventCategories` c
on e.ID = c.EventID
inner join
`Venues` v
on e.ID = v.ID
In my PHP, I call each data cell like this:
$row["Title"] or $row["CategoryID"]
It works, but there are a couple problems. I can only display one category at a time. Also, if I call something like $row["image"], and I have this row in both my Events and Venue table, it displays the wrong one.
I don't get any error messages, but I think I know the problem and solution, and I just don't know how to write it.
I THINK I have to say which table from which to call when I put a variable down, like $row["v.Title"] will call from Venue (but it won't). I also think I have to take a variable like the $row["Categories"] and break it down in to components, but I can't seem to find any information on how to do that either.
Any help would be much appreciated!
Here's my data, showing relevant parts only:
EVENT
ID Title Time Image VenueID
20 Band Battle! 7:00pm band.jpg 1
VENUES
ID Address Name Image
1 123 Street Parkland School school.jpg
EVENT_CATEGORIES
ID EventID CategoryID
1 20 54
2 20 12
3 20 84
CATEGORIES
ID Name
12 School
54 Music
84 Public
Not a duplicate: Can I concatenate multiple MySQL rows into one field?
This might not be the solution to my problem (though it may be a part of it) and it doesn't seem to address how to grab multiple pieces of information from another database, which is the main part of my question.