PDO внешнего ключа ссылки

#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 .