仅显示数据库中的最后一条记录

时间:2019-05-08 18:31:57

标签: php mysql mysqli

我连接了,创建了一个快速脚本,我想在其中管理客户端,域和注释。

问题是,当我从ID:1向客户端添加2个便笺时,查看后我只能看到一个。

以下代码显示了我到目前为止所做的事情

SQL查询:

$sql = "SELECT * FROM domain JOIN note ON domain.id = note.domain_id GROUP BY domain.id";

我的PHP代码:

while($rs = $resultdb->fetch_array(MYSQLI_ASSOC)) {
    echo '<tr>';
    echo '<td>'.$rs["id"].'</td>';
    echo '<td><strong><a href="'.$rs["domain_name"].'" target="_blank">'.$rs["domain_name"].'</a></strong></td>';
    echo '<td>'.$rs["note"].'</td>';
    echo '</tr>';
    }

他得到的结果是:

ID   DOMAIN    NOTE

1    "domain1.com"  "note 1 to domain1.com"

2    "domain2.com"  "note 2 to domain2.com"

但是,在数据库中,我向domain1.com添加了一些注释。

我想查看所有添加到给定域的注释。

编辑:

当我这样做时:"SELECT * FROM domain JOIN note ON domain.id = note.domain_id";

我得到:

I getting

I expect

编辑:添加screnshot

LEFT JOIN

3 个答案:

答案 0 :(得分:1)

您的GROUP BY限制了查询检索的记录。如果您想将所有注释放在一起,则可以尝试使用GROUP_CONCAT()生成一个字段,其中所有注释都在一个字段中...

$sql = "SELECT domain.id as id, domain.domain_name as domain_name,
             GROUP_CONCAT(note.note) as note 
           FROM domain 
           LEFT JOIN note ON domain.id = note.domain_id 
           GROUP BY domain.id";

如果没有针对特定域的注释,您也可以将JOIN更改为LEFT JOIN。

答案 1 :(得分:0)

您需要通过note.domain_id来对group_concat进行分组

如果需要完全匹配,请使用内部联接

 "SELECT  id, domain, group_concat(note) as note 
    FROM domain 
    INNER JOIN note ON domain.id = note.domain_id
    GROUP BY note.domain_id";

如果您还需要ID不带注释的结果,请尝试

 "SELECT  id, domain, (group_concat(ifnull(note,'')) as note 
    FROM domain 
    LEFT JOIN note ON domain.id = note.domain_id
    GROUP BY note.domain_id";

答案 2 :(得分:0)

可能您需要使用一个单独的查询来同时获取“域注释”。例如:

while ($rs = $resultdb->fetch_array(MYSQLI_ASSOC)) {
    $sql_notes = "SELECT * FROM notes WHERE domain_id = '" . (int)$rs['domain_id'] . "'";

    ...
}