Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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
在一列Mysql和PHP中显示多行_Php_Mysql_Sql - Fatal编程技术网

在一列Mysql和PHP中显示多行

在一列Mysql和PHP中显示多行,php,mysql,sql,Php,Mysql,Sql,我试图在一列中显示多个行值。我使用4个表,其中包括一对多的关系。我已经用我需要的数据构建了一个查询,我不确定问题是在这里还是在PHP方面。我已经包括了一些代码,所以你可以得到一个想法。老实说,我认为我可能需要使用groupby,或者在while之后包含一个foreach循环,以获得我想要的结果。如果有人能为我指出正确的方向或指导我找到解决方案,我将不胜感激 我可以通过使用“按类别分组”名称来停止类别复制,但我遇到了子类别名称无法显示所有结果的问题。仅显示第一行。它应该显示主类别名称下的所有子类别

我试图在一列中显示多个行值。我使用4个表,其中包括一对多的关系。我已经用我需要的数据构建了一个查询,我不确定问题是在这里还是在PHP方面。我已经包括了一些代码,所以你可以得到一个想法。老实说,我认为我可能需要使用groupby,或者在while之后包含一个foreach循环,以获得我想要的结果。如果有人能为我指出正确的方向或指导我找到解决方案,我将不胜感激

我可以通过使用“按类别分组”名称来停止类别复制,但我遇到了子类别名称无法显示所有结果的问题。仅显示第一行。它应该显示主类别名称下的所有子类别名称

现在得到这个

Ideas (category_name)

Shop More( subCat_name)
Have a better wardrobe(subCat_description)
但应该是这样的

Ideas (category_name)

Shop More( subCat_name)
Have a better wardrobe(subCat_description)

Build a Blog( subCat_name)
Share Ideas(subCat_description)

Travel to NYC( subCat_name)
Book a holiday(subCat_description)
MYSQL查询

$query = 'SELECT project_users.*, project.project_name, category.category_name,     sub_category.subCat_name, sub_category.subCat_description 
FROM project_users 
JOIN project 
ON project.project_id = project_users.project_id 
JOIN category 
ON category.project_id = project.project_id 
JOIN sub_category 
ON sub_category.category_id = category.category_id';
PHP

$result=mysqli\u查询($link,$query);
如果($结果){
而($row=mysqli\u fetch\u数组($result,mysqli\u ASSOC)){
回声'
';
回显'.$row['category_name'].';
回声'
2014年1月16日

'; 回声'; 回声' '; }//结束时
您需要一些基本逻辑来检测类别何时更改,并为此输出适当的html

$old_cat = null;
while($row = mysqli_fetch_array(...)) {
   if ($row['category'] != $old_cat) {
       ... output category header ...
       $old_cat = $row['category'];
   }
   ... output subcategory stuff here ...
}

您需要一些基本的逻辑来检测类别何时更改,并为此输出适当的html

$old_cat = null;
while($row = mysqli_fetch_array(...)) {
   if ($row['category'] != $old_cat) {
       ... output category header ...
       $old_cat = $row['category'];
   }
   ... output subcategory stuff here ...
}

您需要一些基本的逻辑来检测类别何时更改,并为此输出适当的html

$old_cat = null;
while($row = mysqli_fetch_array(...)) {
   if ($row['category'] != $old_cat) {
       ... output category header ...
       $old_cat = $row['category'];
   }
   ... output subcategory stuff here ...
}

您需要一些基本的逻辑来检测类别何时更改,并为此输出适当的html

$old_cat = null;
while($row = mysqli_fetch_array(...)) {
   if ($row['category'] != $old_cat) {
       ... output category header ...
       $old_cat = $row['category'];
   }
   ... output subcategory stuff here ...
}

编辑:为MySQL更新

抱歉,没有注意到这是MySQL。当然,GROUP_CONCAT将是Listag的替代品(而且更简单)。我在使用换行符时遇到了问题(据我所知,“\r\n”或CHAR(13,10)应该换行,但我在SQLFiddle中没有任何运气)

换行符:

组_CONCAT分隔符示例:

以下是我的想法:

SELECT
    category.category_name || CHAR(13, 10)
    || GROUP_CONCAT((sub_category.subCat_name || CHAR(13,10) || subcat_description 
         separator CHAR(13,10)) -- if the separator gives trouble, remove it, use a REPLACE() function around the GROUP_CONCAT, and replace ',' with CHAR(13, 10)
    as list

FROM 
    project_users 
    JOIN project ON project.project_id = project_users.project_id 
    JOIN category ON category.project_id = project.project_id
    JOIN sub_category ON sub_category.category_id = category.category_id

Group By 
    category.category_name
我不确定这是否可行。尝试使用分隔符函数时,我得到的输出是错误的,或者在使用任何类型的换行符时,行的输出是“0”。请报告并通知我,以便我可以根据需要删除或更改答案


(上一个答案,对甲骨文有好处)

对于在一行中显示多行列_X,使用SQL时,下面可能是一个有用的解决方法。使用
listag
和换行符
chr(10)
将是您的朋友

桌子

代码

输出

Column Y      Column X
 1             a
               b
               c
               d
 2             foo
               bar
如果您喜欢这种方法,这里有一个网站,提供了一些额外的示例:

编辑:

我想我还应该提到
xmlement
XMLAGG
的使用。它是为XML设计的,但也可以与HTML一起使用,因为它们都使用标记。我不经常使用它,所以我不能给你一个很好的例子,但是文档(参见下面的链接)很好地向您展示了XMLAGG的一些功能。您还可以在线查找其他示例:


编辑:为MySQL更新

抱歉,没有注意到这是MySQL。当然,GROUP_CONCAT将是Listag的替代品(而且更简单)。我在使用换行符时遇到了问题(据我所知,“\r\n”或CHAR(13,10)应该换行,但我在SQLFiddle中没有任何运气)

换行符:

组_CONCAT分隔符示例:

以下是我的想法:

SELECT
    category.category_name || CHAR(13, 10)
    || GROUP_CONCAT((sub_category.subCat_name || CHAR(13,10) || subcat_description 
         separator CHAR(13,10)) -- if the separator gives trouble, remove it, use a REPLACE() function around the GROUP_CONCAT, and replace ',' with CHAR(13, 10)
    as list

FROM 
    project_users 
    JOIN project ON project.project_id = project_users.project_id 
    JOIN category ON category.project_id = project.project_id
    JOIN sub_category ON sub_category.category_id = category.category_id

Group By 
    category.category_name
我不确定这是否可行。尝试使用分隔符函数时,我得到的输出是错误的,或者在使用任何类型的换行符时,行的输出是“0”。请报告并通知我,以便我可以根据需要删除或更改答案


(上一个答案,对甲骨文有好处)

对于在一行中显示多行列_X,使用SQL时,下面可能是一个有用的解决方法。使用
listag
和换行符
chr(10)
将是您的朋友

桌子

代码

输出

Column Y      Column X
 1             a
               b
               c
               d
 2             foo
               bar
如果您喜欢这种方法,这里有一个网站,提供了一些额外的示例:

编辑:

我想我还应该提到
xmlement
XMLAGG
的使用。它是为XML设计的,但也可以与HTML一起使用,因为它们都使用标记。我不经常使用它,所以我不能给你一个很好的例子,但是文档(参见下面的链接)很好地向您展示了XMLAGG的一些功能。您还可以在线查找其他示例:


编辑:为MySQL更新

抱歉,没有注意到这是MySQL。当然,GROUP_CONCAT将是Listag的替代品(而且更简单)。我在使用换行符时遇到了问题(据我所知,“\r\n”或CHAR(13,10)应该换行,但我在SQLFiddle中没有任何运气)

换行符:

组_CONCAT分隔符示例:

以下是我的想法:

SELECT
    category.category_name || CHAR(13, 10)
    || GROUP_CONCAT((sub_category.subCat_name || CHAR(13,10) || subcat_description 
         separator CHAR(13,10)) -- if the separator gives trouble, remove it, use a REPLACE() function around the GROUP_CONCAT, and replace ',' with CHAR(13, 10)
    as list

FROM 
    project_users 
    JOIN project ON project.project_id = project_users.project_id 
    JOIN category ON category.project_id = project.project_id
    JOIN sub_category ON sub_category.category_id = category.category_id

Group By 
    category.category_name
我不确定这是否可行。尝试使用分隔符函数时,我得到的输出是错误的,或者在使用任何类型的换行符时,行的输出是“0”。请报告并通知我,以便我可以根据需要删除或更改答案


(上一个答案,对甲骨文有好处)

对于在一行中显示多行列_X,使用SQL时,下面可能是一个有用的解决方法。使用
listag
和换行符
chr(10)
将是您的朋友

桌子

代码

输出

Column Y      Column X
 1             a
               b
               c
               d
 2             foo
               bar
如果您喜欢这种方法,这里有一个网站,提供了一些额外的示例:

编辑:

我想我还应该提到
xmlement