Mysql объединение таблиц и вывод поля если совпали ID между ними
Есть 2 таблицы.
- rent
- 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 шт):
Что то в таком духе:
SELECT photo FROM rent, rent_photo WHERE rent.id=rent_photo.rent_id
Можно еще через inner join сделать, но для начала это го должно хватить
можно оба варианта подсказать?
Вариант, когда цикл перебора записей 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-переменной, в которой будет формироваться текст запроса, так что они должны быть соответствующим образом экранированы.