I have a search function on my website that combines all of the tables using the UNION function and everything works fine except for the fact that it is a static statement. Currently it looks like the code below. I have another table in the database called conferencelist that has the names of all of the conferences. In the future I might want to add more conferences to the conferencelist table, but I don't want to have to go into the code below and add the table. Is there a way to pull the data from the conferencelist table and insert it into the SELECT * FROM conference.
<?php
if($search_type == "Last Name"){
$raw_results_query = "(SELECT * FROM AtlanticCoastConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM CoastalCollegiateSwimmingAssociation
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NCAADivisionII
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NCAADivisionI
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM PacificCollegiateConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM PAC12
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM BIG12
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM BigEast
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM MountainWest
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM ColonialAthleticConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM LittleEastConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM GreaterNewEnglandConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NEWMAC
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NESCAC
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM Atlantic10Conference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM ConferenceUSA
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM MetroAtlanticAthleticConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM Northeast10Conference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM MissouriValleyConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM MAC
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM MetroConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM MichiganIntercollegiateAthleticAssociation
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NorthernSunConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM Empire8Conference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NorthCentralConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM PatriotLeague
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM CoastalAthleticSwimAssociation
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM UniversityAthleticAssociation
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NorthCoastAthleticConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM SunbeltConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM MissouriValleyConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NorthCoastConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM SUNYACConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM NCAADivisionIII
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM BIG10
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM SoutheasternConference
WHERE (`lname` LIKE '%".$query."%'))
UNION
(SELECT * FROM USADiving
WHERE (`lname` LIKE '%".$query."%'))";
}
I also tried this, but it doesn't work... what I altimatley want is a loop that will make a UNION of all of the conferences from the conferencelist table.
<?php
$result1=mysqli_query($con,"select * From conferenceList ORDER By id ASC");
echo "$raw_results_query = '";
while($row=mysqli_fetch_array($result1)){
echo "(SELECT * FROM ";
echo "$row[name]";
echo "WHERE (`lname` LIKE '%".$query."%')) UNION";
}
echo "';";
?>
</div>
Instead of just echoing all the subqueries, put them into an array, join the array with UNION
between them, and use that to create the big query.
$queries = [];
$result1=mysqli_query($con,"select name From conferenceList");
while($row=mysqli_fetch_array($result1)){
$queries[] = "(SELECT * FROM $row[name] WHERE (`lname` LIKE '%$query%'))";
}
$raw_results_query = implode(' UNION ', $queries);
Make sure you use mysqli_real_escape_string()
when setting $query
. Ideally you would use a prepared statement, but that's hard to do in mysqli with a dynamic number of parameters (this is one of the many reasons I prefer PDO).