表里的一个字段,如果重复,则只显示一个,但这些数据的另外一个字段要求显示在一个里,如何实现? 本文转载自  Marine  查看原文  2006-06-23  10    显示/ 数据/

时间:2022-12-05 15:08:51
一个表,查询符合条件的数据,表里一个字段(integer类型),判断如果重复,则只显示一个,其实这个字段在这个table里的功能就是当序列使用,其他字段如果重复则在一个<td>里显示,这个如何实现呢?

11 个解决方案

#1


查的时候就过滤

select distinct ......

#2


查寻有重复字段 会被重命名的。好像是字段名字+1吧,,,你取第一个用原名取第二个加个1就是了。。

#3


to:kevinliuu(@。@) 

distinct好像不行吧,这样把其他数据都过滤掉了吧?
我需要其他数据的其中一个字段还保留信息,显示的时候在一个td里显示

#4


to:qczl1224(倾情一世『qczl.ys168.com』)

你说的这个是怎么实现呢 ?能说具体点吗

#5


你的需求实现起来比较麻烦

对于循环取数据的问题,假设第一条记录生成了table的一行,而第二条的id与第一条重复,这时按照你的要求,是要把其他字段追加到第一行中的其他td中,你是这个意思吧?

但实际上第一行的tr已经生成了,不可能在去追加,除非配合js的innerHTML实现,非常麻烦

给你个思路,rs在返回页面前先做一次处理,对于重复id的记录,其他字段追加成一个字段,最后返回给页面的是不重复,并且字段没有缺失的记录

这个应该好做一些

#6


我也觉得比较麻烦,想了半天也没有好办法
你给的这个思路似乎不错,但是其中有几点我还不确定
1,rs.next(),判断下一条数据跟上面一条是否重复用什么方式判断呢?
2,追加成一个字段是不是str = str + ","+ str;?

#7


你需要使用一个ArrayList存储你的数据

#8


能说具体点吗。。

#9


假设你的表中有3个字段,id, name, age

List list = new ArrayList(); 
String[] str = new String[3] ; //存放记录
String[] tStr = null ; //临时记录
String tempId = "" ;

//循环取数据
while(rs.next())
{
tempId = rs.getString("id");
if(isInList(tempId, list))  //如果重复id的记录,则追加剩余字段
{
tStr = getArray(tempId, list) ;
tStr[1] +=  "," + rs.getString("name") ;
tStr[2] += "," + rs.getString("age") ; 
list.add(tStr) ; //注意这里,需要在调用getArray时,remove该元素,否则会add重复数据
}
else
{
str[0] = rs.getString("id");
str[1] = ...
str[0] = ...

list.add(str) ;
}

}


//这个方法是判断当前记录的id是否在list中存在
private boolean isInList(String id, ArrayList list)
{
//请自己实现
}

//这个方法是根据id返回list中含有id记录的数组
private String[] getArray(String id, ArrayList list)
{
//请自己实现
}

#10


顶楼上的!

#11


在页面用If判断,多用几个if,id重复则不加td,否则加td,然后第一次最后一次也判断。

#1


查的时候就过滤

select distinct ......

#2


查寻有重复字段 会被重命名的。好像是字段名字+1吧,,,你取第一个用原名取第二个加个1就是了。。

#3


to:kevinliuu(@。@) 

distinct好像不行吧,这样把其他数据都过滤掉了吧?
我需要其他数据的其中一个字段还保留信息,显示的时候在一个td里显示

#4


to:qczl1224(倾情一世『qczl.ys168.com』)

你说的这个是怎么实现呢 ?能说具体点吗

#5


你的需求实现起来比较麻烦

对于循环取数据的问题,假设第一条记录生成了table的一行,而第二条的id与第一条重复,这时按照你的要求,是要把其他字段追加到第一行中的其他td中,你是这个意思吧?

但实际上第一行的tr已经生成了,不可能在去追加,除非配合js的innerHTML实现,非常麻烦

给你个思路,rs在返回页面前先做一次处理,对于重复id的记录,其他字段追加成一个字段,最后返回给页面的是不重复,并且字段没有缺失的记录

这个应该好做一些

#6


我也觉得比较麻烦,想了半天也没有好办法
你给的这个思路似乎不错,但是其中有几点我还不确定
1,rs.next(),判断下一条数据跟上面一条是否重复用什么方式判断呢?
2,追加成一个字段是不是str = str + ","+ str;?

#7


你需要使用一个ArrayList存储你的数据

#8


能说具体点吗。。

#9


假设你的表中有3个字段,id, name, age

List list = new ArrayList(); 
String[] str = new String[3] ; //存放记录
String[] tStr = null ; //临时记录
String tempId = "" ;

//循环取数据
while(rs.next())
{
tempId = rs.getString("id");
if(isInList(tempId, list))  //如果重复id的记录,则追加剩余字段
{
tStr = getArray(tempId, list) ;
tStr[1] +=  "," + rs.getString("name") ;
tStr[2] += "," + rs.getString("age") ; 
list.add(tStr) ; //注意这里,需要在调用getArray时,remove该元素,否则会add重复数据
}
else
{
str[0] = rs.getString("id");
str[1] = ...
str[0] = ...

list.add(str) ;
}

}


//这个方法是判断当前记录的id是否在list中存在
private boolean isInList(String id, ArrayList list)
{
//请自己实现
}

//这个方法是根据id返回list中含有id记录的数组
private String[] getArray(String id, ArrayList list)
{
//请自己实现
}

#10


顶楼上的!

#11


在页面用If判断,多用几个if,id重复则不加td,否则加td,然后第一次最后一次也判断。