id time filetype
381839 604208 ABC
414263 340248 ABC
415358 665808 DEF
428034 215805 XYZ
430640 202388 XYZ
436590 4739780 ABC
438848 635382 DEF
上表是我的mysql查询的结果。目前它只显示一个带有上面列的巨型表。它当前显示一列中的所有文件类型。
select *
from `table name`
where id= `value`
目标:我希望得到不同的表格除以文件类型而不是一个混合了所有文件类型的大表格,例如
Table 1:
id time filetype
381839 604208 ABC
414263 340248 ABC
436590 4739780 ABC
Table 2:
428034 215805 XYZ
430640 202388 XYZ
Table 3:
415358 665808 DEF
438848 635382 DEF
等等。
在sql查询中是否有办法可以做到这一点,或者它是否特定于可以进行除法的HTML标记。 ?我尝试通过GROUP BY
将它们组合在一起,但这不是我所预期的。在这方面的任何想法将不胜感激。
答案 0 :(得分:2)
你是说这个吗?
SELECT * From table ORDER BY filetype ASC
要使用标签对答案进行分组,您可以循环结果:
$row=mysqli_fetch_assoc($result);
$type=$row['filetype'];
while($row=mysqli_fetch_assoc($result)){
if($row['filetype']!=$type){
echo 'NEW TYPE';
$type=$row['filetype'];
}
}
答案 1 :(得分:0)
在组之间插入行是客户端功能。您可以使用分析函数来清空重复字段,如果这是您要查找的内容,但是上次我看,Mysql没有ROW_NUMBER()OVER()功能。
此外,我们通常称之为“休息”。在报告中。
只需按查询的filetype字段排序,然后在更改时,适当更改HTML。
答案 2 :(得分:0)
您说I want to get subset of one large table divided by filetype
然后只使用WHERE
条件,如
select *
from `table name`
where filetype= 'ABC'
根据您的评论,您必须单独执行
create table newtbl
as
select *
from `table name`
where filetype= 'ABC'
(OR)
使用类似的存储过程(根据最新评论,而不是为视图创建新表)
create procedure newinsert (IN tabname varchar(20), IN catname varchar(10))
as
begin
create view tabname
as
select *
from `table name`
where filetype= catname
end
比你可以调用你的程序
call newinsert('newtbl','ABC')
call newinsert('newtbl1','XYZ')
call newinsert('newtbl2','DEF')
这样就不会有任何开销;因为视图本身不存储数据。除此之外,如果您只是想要显示隔离数据,那么我认为您最好的选择是在您的应用程序中完成它。
答案 3 :(得分:0)
我认为您希望在显示时分离结果。这不能在SQL中完成。当您使用group by
时,您只是对结果进行分组,而不是如何显示结果。如果您正在使用HTML / CSS,则需要在UI上完成在明显标记的组中显示它。
答案 4 :(得分:0)
阅读你对@rageit回答的评论,我会
SELECT filetype FROM table GROUP BY filetype
因此,您将获得所有文件类型,然后foreach filetype as type
:
SELECT * FROM table WHERE filetype = type
让每个结果单独处理。