2015-05-13 4 views
1

У меня есть база данных, которая хранит таблицы:Как эффективно отображать данные из двух разных таблиц mysql?

рыбы (значения названия, изображения, информация, cooking_type_id) и cooking_type (значения cooking_type_id, эскизы)

Я создал очень простой запрос Mysqli для отображения данных из первой таблицы, но я хочу отобразить миниатюру в соответствии с идентификатором.

Так что для cooking_type, возможно, у «Гриля» есть кулинария_type_id 1. Рыба «Треска» подходит для приготовления на гриле, поэтому она держит значение 1 под «type_id».

Вместо того, чтобы отображать «1», как мне отображать миниатюру?

Вот мой код запроса:

$query = "SELECT * FROM `fish`"; 
    $result = $mysqli->query($query); 
    $mysqli->set_charset("utf8"); 

    while($row = mysqli_fetch_array($result)){ 
     echo '<div class="row" style="background-color:#fff;">'; 

     echo '<div class="col-sm-2">'; 
     echo '<div class="listphoto">'; 
     echo $row['image']; 
     echo '</div></div>'; 

     echo '<div class="col-sm-2">'; 
     echo '<div class="listtext"><h3>'; 
     echo $row['name']; 
     echo '</h3></div></div>'; 

     echo '<div class="col-sm-2">'; 
     echo '<div class="typephoto">'; 
     echo $row['type_id']; 
     echo '</div></div>'; 
     echo '</div>'; 
    } 

    mysqli_close($conn); 
+1

Вы можете использовать внутреннее соединение на cooking_type_id. – Codelord

+0

@MstrQKN Примите некоторые ответы. – Furgas

ответ

1
$query = "SELECT fish.image, fish.name, cooking_type.thumbnail FROM fish 
      JOIN cooking_type 
      ON fish.cooking_type_id = cooking_type.cooking_type_id;"; 
    $result = $mysqli->query($query); 
    $mysqli->set_charset("utf8"); 

    while($row = mysqli_fetch_array($result)){ 
     echo '<div class="row" style="background-color:#fff;">'; 

     echo '<div class="col-sm-2">'; 
     echo '<div class="listphoto">'; 
     echo $row['image']; 
     echo '</div></div>'; 

     echo '<div class="col-sm-2">'; 
     echo '<div class="listtext"><h3>'; 
     echo $row['name']; 
     echo '</h3></div></div>'; 

     echo '<div class="col-sm-2">'; 
     echo '<div class="typephoto">'; 
     echo $row['thumbnail']; 
     echo '</div></div>'; 
     echo '</div>'; 
    } 

    mysqli_close($conn); 
+1

Вы уверены, что ключи массива будут содержать префиксы таблицы? Я думаю, что это должно быть '$ row ['image']' not '$ row ['fish.image']' и т. Д., Но я основываю его на pdo_pgsql. – Furgas

+0

Вы правы @Furgas – marijnz0r

+0

Проблема, которую я имею здесь, заключается в том, что имя присваивается как 'fish', так и' cooking_type'. Но я решил это, изменив имена на f.name и ctype.name. – MstrQKN

0

Используйте JOIN SQL особенность:

SELECT * 
FROM `fish` 
INNER JOIN `cooking_type` 
    ON `cooking_type`.`cooking_type_id` = `fish`.`cooking_type_id` 

Doc: MySQL JOIN SYNTAX

0

попробовать этот

select f.*, ct.* from `fish` as f 
left join `cooking_type` as ct 
on f.cooking_type_id = ct.cooking_type_id 
0

Использование "INNER JOIN" позволит решить вашу проблему легко:

Select * from fish 

inner join 'cooking_type' on ............etc, etc 

MYSQL INNER JOIN

Смежные вопросы