Как создать объединение таблиц mysql, используя другую таблицу в той же базе данных, чтобы выбрать - PullRequest
0 голосов
/ 01 июля 2019

У меня есть функция поиска на моем веб-сайте, которая объединяет все таблицы с использованием функции UNION, и все работает отлично, за исключением того факта, что это статический оператор. В настоящее время это выглядит как код ниже. У меня есть еще одна таблица в базе данных, называемая список конференций, в которой указаны имена всех конференций. В будущем я, возможно, захочу добавить больше конференций в таблицу списка конференций, но мне не нужно заходить в приведенный ниже код и добавлять таблицу. Есть ли способ извлечь данные из таблицы списка конференций и вставить их в конференцию SELECT * FROM.

<?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."%'))";
}

Я тоже пробовал это, но это не работает ... я хочу, чтобы все, что я хотел, - это цикл, который сделает UNION всех конференций из таблицы списка конференций.

<?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 "';";
                
?>

1 Ответ

0 голосов
/ 01 июля 2019

Вместо того, чтобы просто выводить все подзапросы, поместите их в массив, объедините массив с UNION между ними и используйте его для создания большого запроса.

$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);

Убедитесь, что вы используете mysqli_real_escape_string() при настройке $query.В идеале вы должны использовать подготовленный оператор, но это трудно сделать в mysqli с динамическим числом параметров (это одна из многих причин, по которым я предпочитаю PDO).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...