Mysql объединение таблиц и вывод поля если совпали ID между ними

Есть 2 таблицы.

  1. rent
  2. rent_photo

Таблица rent содерижт поле (id).

Таблица rent_photo содержит поле (id, rent_id, photo).

Задача:

Чтобы при совпадении поля id из таблицы rent и поля rent_id из таблицы rent_photo показывалось содержимое поля photo из таблицы rent_photo.

Важные дополнения:

Нам нужно рандомно выбирать 1 фото для каждого id, фото на одно id может быть и 20, но нам нужно 1 значение для каждого поля.

Привожу также PHP цикл, в котором выводится информация и команды Mysql.

В коде PHP используется Redbean PHP.


    <?php if (isset($top3)): ?>
<div id='Description'>
<div class="main">

<!--Колонки-->
<div class="row">
    <?php foreach ($top3 as $id => $ads): ?>
  <div class="column">
      <a href="ads/rent/<?=$id;?>">
    <div class="content">
         <h3><?= isset($ads['title']) ? $ads['title'] : null; ?></h3>



      <?php if (isset($ads['img'])): ?>
                    <img src="./Download_Rent/<?= $ads['img']; ?>"  width="100%" height="100%">




                            <?php else: ?>
                                <img src="./Photo/No photo.jpg">
                            <?php endif; ?>
                                              
    <h3>Цена: <?= number_format($ads['price'], 0, '.', '.'); ?> Р.</h3>
               
                      <button class="PreviewButton">Подробнее...</button>
        </a>
    </div>
  </div>
 <?php endforeach; ?> 
</div>
<!--Конец колонок-->
</div>
<!--Конец центрирования блока объявлений-->
</div>
<?php endif; ?>




Ответы (2 шт):

Автор решения: S.H.

Что то в таком духе:

SELECT photo FROM rent, rent_photo WHERE rent.id=rent_photo.rent_id

Можно еще через inner join сделать, но для начала это го должно хватить

→ Ссылка
Автор решения: Akina

можно оба варианта подсказать?

Вариант, когда цикл перебора записей rent организован в PHP, MySQL возвращает одну запись для каждого заданного rent.id, передаваемый как параметр из переменной $rent_id. Предполагается, что rent_photo.photo содержит имя и путь к файлу с фотографией, а имя файла с путём, который выводится при отсутствии фотографий, передаётся как параметр из переменной $no_photo_file.

SELECT rent.id, COALESCE(rent_photo.photo, '$no_photo_file') filepath_to_photo
FROM rent
LEFT JOIN rent_photo ON rent.id = rent_photo.rent_id
WHERE rent.id = $rent_id
ORDER BY RAND() LIMIT 1

Вариант, когда MySQL возвращает все rent, а потом PHP выполняет цикл перебора полученного набора для вывода.

SELECT rent.id,
       COALESCE( ( SELECT rent_photo.photo 
                   FROM rent_photo 
                   WHERE rent.id = rent_photo.rent_id
                   ORDER BY RAND() LIMIT 1 ), 
                 '$no_photo_file') filepath_to_photo
FROM rent

Одинарные кавычки, обрамляющие литерал, должны присутствовать в значении PHP-переменной, в которой будет формироваться текст запроса, так что они должны быть соответствующим образом экранированы.

→ Ссылка