Php 组_CONCAT未按预期返回输出
我有一个页面,在那里我可以查看所有的“建议”,这些建议都被称为“标签”,类似于堆栈溢出如何包含标签的概念。在使用Group_Concat之前,为该提案输入的每个新标签在表中添加了一个新行,这会导致大量重复数据,如下所示: 即使在使用distinct之后,它也会显示相同的行,因为标记不同。我试图让这些标签存在于同一列中,这样它就像电子商务、“个性化”等,并显示在一行中。我被告知GROUP_CONCAT将是解决方案,但在使用该解决方案后,它似乎返回一行,其中包含以下所有标记: 我真的不知道如何克服这个问题。任何帮助都将不胜感激 以下是sql查询的代码:Php 组_CONCAT未按预期返回输出,php,html,mysql,Php,Html,Mysql,我有一个页面,在那里我可以查看所有的“建议”,这些建议都被称为“标签”,类似于堆栈溢出如何包含标签的概念。在使用Group_Concat之前,为该提案输入的每个新标签在表中添加了一个新行,这会导致大量重复数据,如下所示: 即使在使用distinct之后,它也会显示相同的行,因为标记不同。我试图让这些标签存在于同一列中,这样它就像电子商务、“个性化”等,并显示在一行中。我被告知GROUP_CONCAT将是解决方案,但在使用该解决方案后,它似乎返回一行,其中包含以下所有标记: 我真的不知道如何克
$stmt = $db_conx->prepare('SELECT p.proposal_id, p.proposal_title, p.description, c.course_title, GROUP_CONCAT(DISTINCT t.tag_title) FROM proposal p LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id LEFT JOIN tag_details t on t.tag_code = pt.tag_code LEFT JOIN course_details c on c.course_code = p.course_code');
$stmt->execute();
$proposals = $stmt->fetchAll(PDO::FETCH_ASSOC);
这是表格:
<h4><center>View All Proposals</center></h4>
<div class = "container container-fluid"id = "table_container" style="width:auto; margin-top:50px;" class="mainbox col-md-6">
<div class="row clearfix">
<div class="col-md-12">
<table class="table table-bordered table-hover" id="tab_logic">
<thead>
<tr >
<th class="text-center">
Proposal ID
</th>
<th class="text-center">
Proposal Title
</th>
<th class="text-center">
Proposal Description
</th>
<th class="text-center">
Course
</th>
<th class="text-center">
Tags
</th>
</tr>
</thead>
<tbody>
<!-- populating the table with information from mysql database -->
<?php foreach ($proposals as $proposal) {
echo "<tr><td>";
echo $proposal['proposal_id'];
echo "</td><td>";
echo substr($proposal['proposal_title'],0,30) ."...";
echo "</td><td>";
echo substr($proposal['description'],0,50) ."...";
echo "</td><td>";
echo $proposal['course_title'];
echo "</td><td>";
echo $proposal['GROUP_CONCAT(DISTINCT t.tag_title)'];
echo "<tr><td>";
</tbody>
</table>
</div>
</div>
</div>
您需要在查询的末尾添加
按p.proposal\u id分组
否则,MySQL只是将所有结果分组到一行中
SELECT p.proposal_id, p.proposal_title, p.description, c.course_title,
GROUP_CONCAT(DISTINCT t.tag_title) AS tags
FROM proposal p
LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
LEFT JOIN tag_details t on t.tag_code = pt.tag_code
LEFT JOIN course_details c on c.course_code = p.course_code
GROUP BY p.proposal_id
另外,您可以将GROUP\u CONCAT(不同的t.tag\u title)作为标记来执行,然后您可以执行$proposition['tags']
您需要一个groupby
子句来执行GROUP\u CONCAT
。另外,你可以把组的CONCAT(不同的t.tag\u title)作为标题
,然后你可以做$proposition['titles']
。哦,好吧,好吧,我怎么把它放到这个查询中呢?在中添加这些额外内容似乎很复杂:/刚刚看到您的编辑!我试试看。把$proposal['GROUP\u CONCAT(DISTINCT t.tag\u title)]替换成$proposal['tags'],这非常有效!非常感谢。我可以问一下我如何使用带有where子句的GROUP BY吗?我原以为这就像在最后添加它一样简单,但我遇到了一些问题。请参阅更新的op,了解我正在尝试的第二个查询。thanks@user90210:groupby
在查询中的WHERE
(但在orderby
之前)之后。@user90210:您遇到了什么问题?如果SQL语法有错误,它将返回一个1064;当我尝试将Group By放在WHERE子句之前时,请查看与MySQL服务器版本相对应的手册,以了解在“WHERE pt.tag_code IN(13,22,20)”附近使用的正确语法。我不知道这是否是因为我使用了一个数组?*在WHERE子句之后
SELECT p.proposal_id, p.proposal_title, p.description, c.course_title,
GROUP_CONCAT(DISTINCT t.tag_title) AS tags
FROM proposal p
LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
LEFT JOIN tag_details t on t.tag_code = pt.tag_code
LEFT JOIN course_details c on c.course_code = p.course_code
GROUP BY p.proposal_id