У меня две таблицы.

1- Автомобили (столбцы: ID, имя, описание, изображение)

2- Мотоциклы (столбцы: ID, имя, описание, изображение)

Я хочу зациклить две таблицы на странице Vehicles.php. Я хочу отсортировать по идентификатору в цикле.

Я коды

< Сильный > АВТОМОБИЛИ

$cars= $baglan->query("SELECT * FROM Cars ORDER BY id", PDO::FETCH_ASSOC);      
if ( $cars->rowCount() )
foreach( $cars as $car){ 
-
}}

< Сильный > МОТОЦИКЛЫ

$query= $baglan->query("SELECT * FROM Motorcycles ORDER BY id", PDO::FETCH_ASSOC);      
if ( $query->rowCount() )
foreach( $query as $row){ 
-
}}

Как мне объединить эти два запроса?

Этот код не работает

   $vehicles= $baglan->query("SELECT * FROM Motorcycles , Cars ORDER BY id", PDO::FETCH_ASSOC);     
    if ( $vehicles->rowCount() )
    foreach( $vehicles as $vehicle){ 
    -
    }}

Спасибо

0
frankosa 2 Май 2019 в 10:02

2 ответа

Лучший ответ

Если вы хотите объединить их в одном запросе, вы можете использовать UNION в mysql, но я настоятельно рекомендую использовать его только в том случае, если столбцы двух таблиц совпадают.

try {
    $vehicles = $baglan->query("
        SET @id:=0;
        SELECT (@id:=@id+1) AS `ID`,`Name`,`Description`,`Image` FROM (
            (SELECT * FROM `Cars` ORDER BY `ID`)
            UNION
            (SELECT * FROM `Motorcycles` ORDER BY `ID`)
        ) AS `Vehicles`;
    ", PDO::FETCH_ASSOC);
    if ($vehicles->rowCount()) {
        $id = 1;
        foreach($vehicles as $vehicle) { 
            echo $id++; // Use $id because the `id` column is from two tables
            // use other fields normally
        }
    }
} catch (Exception $e) {
    echo $e->getMessage();
}

Но если вы хотите упорядочить смешанные данные в исходном столбце идентификатора, вы можете использовать это (по убыванию, например):

try {
    $vehicles = $baglan->query("
        SELECT * FROM (
            (SELECT * FROM `Cars` ORDER BY `ID` DESC)
            UNION
            (SELECT * FROM `Motorcycles` ORDER BY `ID` DESC)
        ) AS `Vehicles`
        ORDER BY `ID` DESC;
    ", PDO::FETCH_ASSOC);
    if ($vehicles->rowCount()) {
        $id = 1;
        foreach($vehicles as $vehicle) { 
            echo $id++; // Use $id because the `id` column is from two tables
            // use other fields normally
        }
    }
} catch (Exception $e) {
    echo $e->getMessage();
}
0
MLF 2 Май 2019 в 07:46

Поскольку они имеют одинаковые столбцы, вы можете использовать UNION,

SELECT * FROM Motorcycles
UNION
SELECT * FROM Cars
0
Qirel 2 Май 2019 в 07:09