Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 组_CONCAT未按预期返回输出_Php_Html_Mysql - Fatal编程技术网

Php 组_CONCAT未按预期返回输出

Php 组_CONCAT未按预期返回输出,php,html,mysql,Php,Html,Mysql,我有一个页面,在那里我可以查看所有的“建议”,这些建议都被称为“标签”,类似于堆栈溢出如何包含标签的概念。在使用Group_Concat之前,为该提案输入的每个新标签在表中添加了一个新行,这会导致大量重复数据,如下所示: 即使在使用distinct之后,它也会显示相同的行,因为标记不同。我试图让这些标签存在于同一列中,这样它就像电子商务、“个性化”等,并显示在一行中。我被告知GROUP_CONCAT将是解决方案,但在使用该解决方案后,它似乎返回一行,其中包含以下所有标记: 我真的不知道如何克

我有一个页面,在那里我可以查看所有的“建议”,这些建议都被称为“标签”,类似于堆栈溢出如何包含标签的概念。在使用Group_Concat之前,为该提案输入的每个新标签在表中添加了一个新行,这会导致大量重复数据,如下所示:

即使在使用distinct之后,它也会显示相同的行,因为标记不同。我试图让这些标签存在于同一列中,这样它就像电子商务、“个性化”等,并显示在一行中。我被告知GROUP_CONCAT将是解决方案,但在使用该解决方案后,它似乎返回一行,其中包含以下所有标记:

我真的不知道如何克服这个问题。任何帮助都将不胜感激

以下是sql查询的代码:

$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