PHP MySQL объединяет две таблицы запроса

0

У меня есть две таблицы, т.е. Абстрактная таблица и автор с отношением один к многим, для каждой итерации в цикле while я хочу отобразить таблицу html уникальной строки данных из абстрактной таблицы с соответствующими строками из таблицы авторов.

Это то, что я сделал:

public function getAll() {
    try {
          $sql = "  SELECT tbl_abstract.abstract_id, tbl_abstract.first_name,
                            tbl_abstract.last_name,tbl_abstract.content,        
                            tbl_author.afirst_name, tbl_author.alast_name, 
                            tbl_author.aaffilition 
                    FROM tbl_abstract  
                        INNER JOIN tbl_author ON  tbl_abstract.abstract_id = tbl_author.abstract_id 
                    GROUP BY tbl_abstract.abstract_id";

          $stmt= $this->pdo->prepare($sql);
          $stmt->execute();
          $count =  $stmt ->rowCount();
          while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
          ?>

             <table class="table" >
              <tr>
                <td  align="center" >
                   //data from tbl_abstract
                   <?php echo $row["abstract_id"];  ?>. <?php print($row["abstract_title"]); ?>
                    <?php echo $row["first_name"].'&nbsp;'.$row["last_name"]; ?>,

                    //data from tbl_author
                    <?php echo $row["afirst_name"].'&nbsp;'.$row["alast_name"];?>         
                </td>  
              </tr>
              <tr>
                <td align="center" ">
                   //data from tbl_abstract
                   <?php print($row["content"]); ?>
                </td>
              </tr>

            </table>
          <?php 
         }          
    }catch(PDOException $e){
       echo $e->getMessage(); 
       return false;
    }  
}

Есть три записи из tbl_author, связанных с abstract_id от tbl_abstract, но я получаю только одну запись вместо 3 из них. Пожалуйста, помогите

  • 1
    Небольшое примечание Нет смысла готовить запрос, если у него нет привязываемых параметров.
Теги:
pdo

2 ответа

0
Лучший ответ

Попробуй это :-

<?php

$sql = "SELECT * 
        FROM tbl_abstract
        where abstract_id IN (SELECT distinct abstract_id
                              FROM tbl_abstract)";

      $stmt= $this->pdo->prepare($sql);
      $stmt->execute();
      $count =  $stmt ->rowCount();
?>
      <table class="table" >
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
      ?>
          <tr>
            <td  align="center" >
               //data from tbl_abstract
               <?php echo $row["abstract_id"];  ?> <?php print($row["abstract_title"]); ?>
                <?php echo $row["first_name"].'&nbsp;'.$row["last_name"]; ?>,
         <?php          
         $sql1 = "SELECT *
                  FROM tbl_author
                  WHERE abstract_id = '".$row["abstract_id"]."'" ;
         $stmt1= $this->pdo->prepare($sql1);
         $stmt1->execute();
         while($row1 = $stmt1->fetch(PDO::FETCH_ASSOC)){
                //data from tbl_author
                echo $row1["afirst_name"].'&nbsp;'.$row1["alast_name"];
         } ?>         
            </td>
            <td align="center">
               //data from tbl_abstract
               <?php print($row["content"]); ?>
            </td>
          </tr>
       <?php } ?>

        </table>
  • 0
    Я пытаюсь это сделать, но в html-таблице отображаются дубликаты записей того же abstract_id из tbl_abstract, и каждая запись содержит одну строку записей из tbl_author. Что мне нужно, это html-таблица для отображения одной записи из tbl_abstact со связанной 3-ей записью из tbl_athor
  • 0
    Хорошо, тогда позвольте мне немного изменить запрос
Показать ещё 11 комментариев
0

Попробуйте удалить предложение GROUP BY следующим образом:

SELECT 
    tbl_abstract.abstract_id, tbl_abstract.first_name, 
    tbl_abstract.last_name,tbl_abstract.content, tbl_author.afirst_name, 
    tbl_author.alast_name, tbl_author.aaffilition 
FROM 
    tbl_abstract  
INNER JOIN 
    tbl_author ON  tbl_abstract.abstract_id = tbl_author.abstract_id

Группа group группирует всех авторов по полю abstract_id, что означает, что он не вернет всех авторов, а только один для одного abstract_id (на основе поля сортировки, которое в этом случае, вероятно, является первичным ключом, поскольку оно явно не определено).

  • 0
    @marc_s Попробуйте, но в html-таблице отображаются повторяющиеся записи одного и того же abstract_id из tbl_abstract, и каждая запись содержит одну строку записи из tbl_author. Мне нужна таблица html для отображения одной записи из tbl_abstact со связанной 3-ей записью из tbl_athor

Ещё вопросы

Сообщество Overcoder
Наверх
Меню