我连接了,创建了一个快速脚本,我想在其中管理客户端,域和注释。
问题是,当我从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";
我得到:
编辑:添加screnshot
答案 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'] . "'";
...
}