PHP MySQL连接两个表查询

PHP MySQL连接两个表查询,php,mysql,pdo,Php,Mysql,Pdo,我有两个表,即abstract table和author,具有一对多关系,对于while循环中的每个迭代,我希望显示一个html表,其中包含来自abstract table的唯一数据行以及来自author table的相应行 这就是我所做的: public function getAll() { try { $sql = " SELECT tbl_abstract.abstract_id, tbl_abstract.first_name,

我有两个表,即abstract table和author,具有一对多关系,对于while循环中的每个迭代,我希望显示一个html表,其中包含来自abstract table的唯一数据行以及来自author table的相应行

这就是我所做的:

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;
    }  
}
公共函数getAll(){
试一试{
$sql=“选择tbl\u abstract.abstract\u id,tbl\u abstract.first\u name,
tbl_abstract.姓,tbl_abstract.content,
tbl_author.affirst_name,tbl_author.alast_name,
tbl_作者办公室
摘自tbl_摘要
tbl_abstract.abstract_id=tbl_author.abstract_id上的内部联接tbl_author
按tbl_abstract.abstract_id”分组;
$stmt=$this->pdo->prepare($sql);
$stmt->execute();
$count=$stmt->rowCount();
而($row=$stmt->fetch(PDO::fetch\U ASSOC)){
?>
//来自tbl_摘要的数据
. 
,
//来自tbl_作者的数据

尝试删除
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 by是按字段abstract_id对所有作者进行分组,这意味着它不会返回所有作者,而是只返回一对一的abstract_id(基于排序字段,在本例中,排序字段可能是主键,因为它没有显式定义)

尝试以下方法:-

<?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>

而($row=$stmt->fetch(PDO::fetch\U ASSOC)){
?>
//来自tbl_摘要的数据
,
//来自tbl_摘要的数据

Small Note如果查询没有任何可绑定项,那么准备查询就没有什么意义parameters@marc_s尝试一下,但是html表显示来自tbl_abstract的同一个abstract_id的重复记录,并且每个记录包含来自tbl_author的一个记录行。我需要的是html表显示来自tbl_abstract的单个记录以及关联的来自tbl_athorI的3条记录尝试一下,但html表显示来自tbl_abstract的相同摘要id的重复记录,每个记录包含来自tbl_author的一个记录行。我需要的是html表显示来自tbl_abstract的单个记录和来自tbl_athorOk的关联3条记录,然后让我修改一下我编辑过的查询SQL语句,你能检查输出吗?是的,输出仍然相同,有重复的Abstract_IdP请检查新的SQL语句,它不能接受任何重复的id。请重新检查新的SQL语句并使用它。