Как вывести 2 поля name (с одинаковыми названиями из разных таблиц) в браузер с помощью php и sql?

3

Здравствуйте. Урок 60. Задание п. 4. Как можно вывести все данные 2 таблиц кроме id в браузер?

$query = $mysqli->query('SELECT * FROM `movie` LEFT JOIN categories USING (id)');

while ( $row = mysqli_fetch_assoc($query) ) {
    echo $row['name'].$row['year'].'<br>';
}

Отсюда выводит name из categories. А как сделать чтобы из movie тоже выводился name?

php
mysql

4 ответов

1

В этой теме есть ответ:

https://fructcode.com/ru/qa/operator-select-zadanie-59-rbarh9/

2

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

$query = $mysqli->query("SELECT id as cat_id, name as cat_name FROM `categories` 
                             INNER JOIN movie ON movie.category_id = categories.id
                             INNER JOIN discriptions ON movie.discriptions_id = discriptions.id"
                            );

затем в цикле их также и вызывать: cat_name и cat_id. Алиас к полям таблиц нужно создавать уникальный и явно указывать, для того, чтобы вывод был без ошибок.

3

Из вашего запроса с алиасами получится такой SQL-запрос:

SELECT movie.id as mov_id, categories.id as cat_id, movie.name as mov_name, categories.name as cat_name, movie.rating as mov_rating, movie.year as mov_year FROM `movie` LEFT JOIN categories ON categories.id = movie.category_id
$query = $mysqli->query('SELECT movie.id as mov_id, categories.id as cat_id, movie.name as mov_name, categories.name as cat_name, movie.rating as mov_rating, movie.year as mov_year FROM `movie` LEFT JOIN categories ON categories.id = movie.category_id');

while ( $row = mysqli_fetch_assoc($query) ) {
    echo $row['mov_name'].$row['cat_name'].$row['cat_name'].'<br>';
}
1

Спасибо! У меня получилось с вот таким запросом:

$query = $mysqli->query('SELECT movie.id as mov_id, categories.id as cat_id, movie.name as mov_name, categories.name as cat_name, movie.year as mov_year, descriptions.id as des_id, descriptions.name as des_name FROM `movie`
LEFT JOIN categories ON categories.id = movie.category_id
LEFT JOIN descriptions ON descriptions.id = movie.description_id');

while ( $row = mysqli_fetch_assoc($query) ) {
    echo $row['mov_name'].$row['cat_name'].$row['mov_year'].$row['des_name'].'<br>';
}
Sign up or Log in to write an answer