#php #mysql
Вопрос:
У меня есть прошивка таблицы и в ней столбец category_id, который является внешним ключом из категорий таблиц. Я хочу извлечь записи из таблицы прошивки и отобразить их. Вместо идентификатора категории должно отображаться название категории. В обычном небезопасном mysql естественное соединение было прямым, но с PDOs оно делает то же самое, но дублирует «прошивку» в зависимости от количества категорий.
Допустим, у нас есть прошивка под названием «samsung» и она находится в категории «отремонтирована», И у нас есть, как и в 7 других категориях, Когда я получаю прошивку samsung, мой запрос выбора будет правильно ее получать, но дублировать samsung 7 раз. Но если я не присоединюсь естественным образом и просто повторю category_id в таблице прошивки, все будет в порядке
Я новичок в PDOs..
$query = $DBH->prepare("SELECT * FROM firmware natural join categories order by firm_category asc");
$query-> execute();
while($row = $STH->fetch()){ ?>
<a class="product-link" href='firm_details.php?p=<?php echo $row['product_id']; ?>amp;amp;c=<?php echo $row['product_cat']; ?>'>
<div class="col-md-4 mt-3">
<div class="border p-2">
<h6><?php $row['cat_title'] ?></h6> //this is the foreign Key
<h6><?php echo $row['firm_title']; ?></h6>
</div>
</div>
</a>
<?php}?>
Комментарии:
1. PDO не изменяет результаты запроса. Это просто библиотека PHP для вызова базы данных.
2. В вашем запросе выбирается не только
samsung
прошивка. В нем нетWHERE
пункта, поэтому он выбирает все прошивки вместе с их категориями.3. Если вы выполните тот же запрос в phpMyAdmin или командной строке mysql, вы увидите те же результаты.
4. Вы можете использовать только
natural join
в том случае, если внешний ключ имеет то же имя, что и столбец, на который ссылается ссылка.5. Вы должны использовать
INNER JOIN
вместоNATURAL JOIN
, если имена столбцов не совпадают. И проверка на равенство должна быть проведенаON
.