I've been slowly learning and building my little search system - however I seem stuck at this tough question.
I have a many-many relation database of events. Each event can have multiple music styles stored in the events_music_styles table. The events_music_styles table has it's own ID column, EVENT_ID and MUSIC_STYLE_ID.
How can I search (through the use of a checkbox array) for music styles in the events table when the music styles and events are referenced in another table all together?
This is what I have so far:
HTML
<input type="checkbox" class="group1" id="checkbox1" value="latino">Latino<BR />
<input type="checkbox" class="group1" id="checkbox2" value="rock">Rock<BR />
<input type="checkbox" class="group1" id="checkbox3" value="oldies">Oldies<BR />
<input type="checkbox" class="group1" id="checkbox4" value="reggae">Reggae<BR />
<div id="AnswerField"></div>
Jquery
var VarDancingTo = new Array();
$('.group1:checked').each(function () {
VarDancingTo[VarDancingTo.length] = $(this).val();
});
$("#AnswerField").text( VarDancingTo.join(', '));
and a simple PHP table with my complete database (if that's of any help)
$query = 'SELECT e.ID, e.EVENT_NAME, e.EVENT_DATE, e.ENTRANCE_PRICE, v.BEER_PRICE, v.WINE_PRICE, v.SPIRITS_PRICE, v.VENUE_NAME, l.LOCATION, GROUP_CONCAT(ms.MUSIC_STYLE_NAME) as `Styles`'.
' FROM events AS e'.
' INNER JOIN venues as v ON e.VENUE_LOCATION = v.ID'.
' INNER JOIN locations AS l ON e.VENUE_LOCATION = l.ID'.
' INNER JOIN events_music_styles AS ems ON e.ID = ems.EVENT_ID'.
' INNER JOIN music_styles AS ms ON ms.ID = ems.MUSIC_STYLE_ID'.
' GROUP BY e.ID';
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
Here's the relations between the tables:

Here are the create table statements:
SET FOREIGN_KEY_CHECKS=0;
-- Drop table locations
DROP TABLE IF EXISTS `locations`;
CREATE TABLE `locations` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`LOCATION` varchar(50),
`LOCATION_SK` varchar(50) CHARACTER SET utf8,
PRIMARY KEY(`ID`)
)
ENGINE=INNODB;
-- Drop table music_styles
DROP TABLE IF EXISTS `music_styles`;
CREATE TABLE `music_styles` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`MUSIC_STYLE_NAME` varchar(50),
`MUSIC_STYLE_NAME_SK` varchar(50) CHARACTER SET utf8,
PRIMARY KEY(`ID`)
)
ENGINE=INNODB;
-- Drop table venue_types
DROP TABLE IF EXISTS `venue_types`;
CREATE TABLE `venue_types` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`TYPE_NAME` varchar(50),
`TYPE_NAME_SK` varchar(50) CHARACTER SET utf8,
PRIMARY KEY(`ID`)
)
ENGINE=INNODB;
-- Drop table venues
DROP TABLE IF EXISTS `venues`;
CREATE TABLE `venues` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`VENUE_TYPE` int(11),
`VENUE_LOCATION` int(11),
`VENUE_NAME` varchar(50),
`ADDRESS` varchar(255),
`ICON_URL` varchar(100),
`PAGE_URL` varchar(100),
`LAT` int(100),
`LNG` int(100),
`VENUE_CLOSE_T_MO` varchar(50),
`VENUE_CLOSE_T_TU` varchar(50),
`VENUE_CLOSE_T_WE` varchar(50),
`VENUE_CLOSE_T_TH` varchar(50),
`VENUE_CLOSE_T_FR` varchar(50),
`VENUE_CLOSE_T_SA` varchar(50),
`VENUE_CLOSE_T_SU` varchar(50),
`BEER_PRICE` int(11),
`WINE_PRICE` int(11),
`SPIRITS_PRICE` int(11),
`IF_COFFEE` int(1) DEFAULT '1',
`IF_DRAFT_BEER` int(1) DEFAULT '0',
`IF_TEA` int(1) DEFAULT '1',
`IF_HOT_CHOCOLATE` int(1) DEFAULT '0',
`IF_BILLIARD` int(1) DEFAULT '0',
`IF_HOOKAH` int(1) DEFAULT '0',
`IF_OUTDOOR_PATIO` int(1) DEFAULT '0',
`IF_OUTDOORS` int(1) DEFAULT '0',
`IF_NON_SMOKING_AREA` int(1) DEFAULT '0',
PRIMARY KEY(`ID`),
CONSTRAINT `Ref_01` FOREIGN KEY (`VENUE_TYPE`)
REFERENCES `venue_types`(`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Ref_02` FOREIGN KEY (`VENUE_LOCATION`)
REFERENCES `locations`(`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
ENGINE=INNODB;
-- Drop table events
DROP TABLE IF EXISTS `events`;
CREATE TABLE `events` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`VENUE_LOCATION` int(11),
`EVENT_NAME` varchar(50),
`EVENT_DATE` date,
`EVENT_NAME_SK` varchar(50) CHARACTER SET utf8,
`EVENT_DESC` varchar(255),
`EVENT_DESC_SK` varchar(255) CHARACTER SET utf8,
`IMAGE_URL` varchar(255),
`EVENT_URL` varchar(255),
`START_TIME` varchar(50),
`END_TIME` varchar(50),
`IF_ENTRANCE` int(1) DEFAULT '0',
`ENTRANCE_PRICE` int(11) DEFAULT '0',
PRIMARY KEY(`ID`),
CONSTRAINT `Ref_03` FOREIGN KEY (`VENUE_LOCATION`)
REFERENCES `venues`(`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
ENGINE=INNODB;
-- Drop table events_music_styles
DROP TABLE IF EXISTS `events_music_styles`;
CREATE TABLE `events_music_styles` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`EVENT_ID` int(11),
`MUSIC_STYLE_ID` int(11),
PRIMARY KEY(`ID`),
CONSTRAINT `Ref_05` FOREIGN KEY (`MUSIC_STYLE_ID`)
REFERENCES `music_styles`(`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Ref_06` FOREIGN KEY (`EVENT_ID`)
REFERENCES `events`(`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
ENGINE=INNODB;
SET FOREIGN_KEY_CHECKS=1;