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