这是一句sql查询,其中每个用户(UserID)可能含有数条符合要求的查询,我这里想把每一个用户所有符合要求的条目总数调出,而且还想把每个用户符合要求的最后一条条目的数据(用ID最大来判断)调出,请问大家这种要求我在一句sql语句中怎么实现呢?(上面的语句只是给出了用户名和符合要求的条目总数)
如果不能够实现,我怎么做才比较好呢??
谢谢关注!!
15 个解决方案
#1
distinct UserID, COUNT(*) as thetotal 这两个是不能一起用得
#2
distinct UserID, COUNT(*) as thetotal 这两个是不能一起用得
------------------------------------------------------------------------
后面用个GROUP BY UserID就应该可以了,我上面的语句是通过验证的,可以正常运行,应该不会有错。
------------------------------------------------------------------------
后面用个GROUP BY UserID就应该可以了,我上面的语句是通过验证的,可以正常运行,应该不会有错。
#3
strSQL="select userid,count(*) as thetotal,max(id) as maxid from Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID"
这儿不用写distinct,画蛇添足
这儿不用写distinct,画蛇添足
#4
上面是只要最大ID的,如果数据也要的话那
strSQL="select id,userid,(select count(*) from Product_Info where userid = a.userid) as thetotal, field1,field2,field3 from Product_Info a where id in (select max(id) from
Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID)"
strSQL="select id,userid,maxid,thetotal,field1,field2,field3 from (select userid,max(id) as maxid,count(*) as thetotal from
Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID) a inner join Product_Info b on a.maxid=b.id"
这两个应该都可以,你自己试试哪个效率高吧
strSQL="select id,userid,(select count(*) from Product_Info where userid = a.userid) as thetotal, field1,field2,field3 from Product_Info a where id in (select max(id) from
Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID)"
strSQL="select id,userid,maxid,thetotal,field1,field2,field3 from (select userid,max(id) as maxid,count(*) as thetotal from
Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID) a inner join Product_Info b on a.maxid=b.id"
这两个应该都可以,你自己试试哪个效率高吧
#5
strSQL="select userid,count(*) as thetotal,max(id) as maxid from Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID"
这儿不用写distinct,画蛇添足
--------------------------------------------------------------------------------
当看到这位朋友把max(id) as maxid写上去的时候,我很吃惊,因为我记得我写上去的时候明明把这句去掉了阿,怎么又出来了呢?呵呵,原来是你自己写的阿。
我之所以把这句拿掉,就是不想让大家产生误解,也就是说我的意思并不是求取每个用户的最大ID,而是如上所说,想把“每个用户符合要求的最后一条条目的数据”——即其ID最大的那条条目的其他所有数据(比如其字段nameCn和ContentCn)调出来,并且是在此一句sql查询中调出来。
因为我并不精通sql语句,不知道这能不能实现,所以来请教大家。如果能实现当然更好,如果实现不了请问有别的办法吗??
这儿不用写distinct,画蛇添足
--------------------------------------------------------------------------------
当看到这位朋友把max(id) as maxid写上去的时候,我很吃惊,因为我记得我写上去的时候明明把这句去掉了阿,怎么又出来了呢?呵呵,原来是你自己写的阿。
我之所以把这句拿掉,就是不想让大家产生误解,也就是说我的意思并不是求取每个用户的最大ID,而是如上所说,想把“每个用户符合要求的最后一条条目的数据”——即其ID最大的那条条目的其他所有数据(比如其字段nameCn和ContentCn)调出来,并且是在此一句sql查询中调出来。
因为我并不精通sql语句,不知道这能不能实现,所以来请教大家。如果能实现当然更好,如果实现不了请问有别的办法吗??
#6
好的,那我先试试!谢谢!!
#7
我反复试了一下,下面的这句是可以使用的:
strSQL="SELECT *, a.maxID, a.CorpName, a.thetotal FROM (SELECT MAX(ID) AS maxID, dbo.GetCorpName(UserID) AS CorpName, COUNT(*) AS thetotal FROM Product_Info WHERE (nameCn LIKE '%" & KeyWord & "%' OR ContentCn LIKE '%" & KeyWord & "%') GROUP BY UserID) a INNER JOIN Product_info b ON a.maxID = b.ID"
--------------------------------------------------------------------------
另外我还想请教一下(另外发了一个帖子但没人理:):
现在做一个搜索结果页面,需要把标题含有关键字的条目排在前面,而把内容含有关键字的条目排在后面,请问大家这个能不能用一句sql查询语句实现?假如再给这两种查询结果分别排序,不知道能不能用一句sql查询语句实现??
当然我知道如果分两次查询并一前一后列出当然很容易实现,但我觉得那样可能就拖慢了速度,请问大家我该怎么做呢??举个例子,假如是如下的语句,应该怎么样改写呢?
strSQL="select * from Product_Info where (nameCn like '%"& KeyWord &"%' or ContentCn like '%"& KeyWord &"%') order by ID desc"
请各位大侠多多指教!谢谢!!
strSQL="SELECT *, a.maxID, a.CorpName, a.thetotal FROM (SELECT MAX(ID) AS maxID, dbo.GetCorpName(UserID) AS CorpName, COUNT(*) AS thetotal FROM Product_Info WHERE (nameCn LIKE '%" & KeyWord & "%' OR ContentCn LIKE '%" & KeyWord & "%') GROUP BY UserID) a INNER JOIN Product_info b ON a.maxID = b.ID"
--------------------------------------------------------------------------
另外我还想请教一下(另外发了一个帖子但没人理:):
现在做一个搜索结果页面,需要把标题含有关键字的条目排在前面,而把内容含有关键字的条目排在后面,请问大家这个能不能用一句sql查询语句实现?假如再给这两种查询结果分别排序,不知道能不能用一句sql查询语句实现??
当然我知道如果分两次查询并一前一后列出当然很容易实现,但我觉得那样可能就拖慢了速度,请问大家我该怎么做呢??举个例子,假如是如下的语句,应该怎么样改写呢?
strSQL="select * from Product_Info where (nameCn like '%"& KeyWord &"%' or ContentCn like '%"& KeyWord &"%') order by ID desc"
请各位大侠多多指教!谢谢!!
#8
还有一个类似的问题,我要从两个表中调出不同的内容(注意是不同的内容),但我需要把这两个表的内容在一起显示:一条一条的来,每一条只是来自一个表。
当然,我可以先调一个表,把它的条目全部列出后再调另外一个表。但我想知道的是我能不能把它们来一同分页呢?就是说,假如以20条来分页,搜索第一个表有15个符合,第二个表有45个符合,那么总共就三页,请问我能不能把这两个表调出的内容放在这三页来显示呢??
还有一种要求更高的,就是这两个表调出的条目交叉排列,比如按上一楼所说的那样交叉排列,请问这样能做到吗?
当然,我可以先调一个表,把它的条目全部列出后再调另外一个表。但我想知道的是我能不能把它们来一同分页呢?就是说,假如以20条来分页,搜索第一个表有15个符合,第二个表有45个符合,那么总共就三页,请问我能不能把这两个表调出的内容放在这三页来显示呢??
还有一种要求更高的,就是这两个表调出的条目交叉排列,比如按上一楼所说的那样交叉排列,请问这样能做到吗?
#9
没有高手帮帮忙吗??
#10
select field1,field2,field3 from table1
union
select field4,field5,field6 from table2
上面我说的那两种方法,第一种不能用么?我试了一下,应该是第一种方法效率比较高
union
select field4,field5,field6 from table2
上面我说的那两种方法,第一种不能用么?我试了一下,应该是第一种方法效率比较高
#11
现在做一个搜索结果页面,需要把标题含有关键字的条目排在前面,而把内容含有关键字的条目排在后面,请问大家这个能不能用一句sql查询语句实现?假如再给这两种查询结果分别排序,不知道能不能用一句sql查询语句实现??
select field1,field2,field3 from table1 where title like '%key%'
union
select field1,field2,field3 from table2 where content like '%key%'
不过注意用union对查询速度可能影响很大
select field1,field2,field3 from table1 where title like '%key%'
union
select field1,field2,field3 from table2 where content like '%key%'
不过注意用union对查询速度可能影响很大
#12
好的,谢谢dreamover(梦醒了) 这位朋友,我再试试!
#13
问题描述很累,让人不太愿意看。
你应该把几个字段列出来,放几条数据,然后说出你要的结果就行了。
你应该把几个字段列出来,放几条数据,然后说出你要的结果就行了。
#14
现在做一个搜索结果页面,需要把标题含有关键字的条目排在前面,而把内容含有关键字的条目排在后面,请问大家这个能不能用一句sql查询语句实现?假如再给这两种查询结果分别排序,不知道能不能用一句sql查询语句实现??
select field1,field2,field3 from table1 where title like '%key%'
union
select field1,field2,field3 from table2 where content like '%key%'
------------------------------------------------------------------------------------
这种方法,思路很清楚,但实际上我的检验结果表明,此方法对排序好像不起作用
select field1,field2,field3 from table1 where title like '%key%'
union
select field1,field2,field3 from table2 where content like '%key%'
------------------------------------------------------------------------------------
这种方法,思路很清楚,但实际上我的检验结果表明,此方法对排序好像不起作用
#15
select 1 as ct,field1,field2,field3 from table1 where title like '%key%'
union
select 2 as ct,field1,field2,field3 from table2 where content like '%key%'
order by ct,field1,field2,field3
union
select 2 as ct,field1,field2,field3 from table2 where content like '%key%'
order by ct,field1,field2,field3
#1
distinct UserID, COUNT(*) as thetotal 这两个是不能一起用得
#2
distinct UserID, COUNT(*) as thetotal 这两个是不能一起用得
------------------------------------------------------------------------
后面用个GROUP BY UserID就应该可以了,我上面的语句是通过验证的,可以正常运行,应该不会有错。
------------------------------------------------------------------------
后面用个GROUP BY UserID就应该可以了,我上面的语句是通过验证的,可以正常运行,应该不会有错。
#3
strSQL="select userid,count(*) as thetotal,max(id) as maxid from Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID"
这儿不用写distinct,画蛇添足
这儿不用写distinct,画蛇添足
#4
上面是只要最大ID的,如果数据也要的话那
strSQL="select id,userid,(select count(*) from Product_Info where userid = a.userid) as thetotal, field1,field2,field3 from Product_Info a where id in (select max(id) from
Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID)"
strSQL="select id,userid,maxid,thetotal,field1,field2,field3 from (select userid,max(id) as maxid,count(*) as thetotal from
Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID) a inner join Product_Info b on a.maxid=b.id"
这两个应该都可以,你自己试试哪个效率高吧
strSQL="select id,userid,(select count(*) from Product_Info where userid = a.userid) as thetotal, field1,field2,field3 from Product_Info a where id in (select max(id) from
Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID)"
strSQL="select id,userid,maxid,thetotal,field1,field2,field3 from (select userid,max(id) as maxid,count(*) as thetotal from
Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID) a inner join Product_Info b on a.maxid=b.id"
这两个应该都可以,你自己试试哪个效率高吧
#5
strSQL="select userid,count(*) as thetotal,max(id) as maxid from Product_Info where (nameCn like '%" & KeyWord & "%' or ContentCn like '%" & KeyWord & "%') GROUP BY UserID"
这儿不用写distinct,画蛇添足
--------------------------------------------------------------------------------
当看到这位朋友把max(id) as maxid写上去的时候,我很吃惊,因为我记得我写上去的时候明明把这句去掉了阿,怎么又出来了呢?呵呵,原来是你自己写的阿。
我之所以把这句拿掉,就是不想让大家产生误解,也就是说我的意思并不是求取每个用户的最大ID,而是如上所说,想把“每个用户符合要求的最后一条条目的数据”——即其ID最大的那条条目的其他所有数据(比如其字段nameCn和ContentCn)调出来,并且是在此一句sql查询中调出来。
因为我并不精通sql语句,不知道这能不能实现,所以来请教大家。如果能实现当然更好,如果实现不了请问有别的办法吗??
这儿不用写distinct,画蛇添足
--------------------------------------------------------------------------------
当看到这位朋友把max(id) as maxid写上去的时候,我很吃惊,因为我记得我写上去的时候明明把这句去掉了阿,怎么又出来了呢?呵呵,原来是你自己写的阿。
我之所以把这句拿掉,就是不想让大家产生误解,也就是说我的意思并不是求取每个用户的最大ID,而是如上所说,想把“每个用户符合要求的最后一条条目的数据”——即其ID最大的那条条目的其他所有数据(比如其字段nameCn和ContentCn)调出来,并且是在此一句sql查询中调出来。
因为我并不精通sql语句,不知道这能不能实现,所以来请教大家。如果能实现当然更好,如果实现不了请问有别的办法吗??
#6
好的,那我先试试!谢谢!!
#7
我反复试了一下,下面的这句是可以使用的:
strSQL="SELECT *, a.maxID, a.CorpName, a.thetotal FROM (SELECT MAX(ID) AS maxID, dbo.GetCorpName(UserID) AS CorpName, COUNT(*) AS thetotal FROM Product_Info WHERE (nameCn LIKE '%" & KeyWord & "%' OR ContentCn LIKE '%" & KeyWord & "%') GROUP BY UserID) a INNER JOIN Product_info b ON a.maxID = b.ID"
--------------------------------------------------------------------------
另外我还想请教一下(另外发了一个帖子但没人理:):
现在做一个搜索结果页面,需要把标题含有关键字的条目排在前面,而把内容含有关键字的条目排在后面,请问大家这个能不能用一句sql查询语句实现?假如再给这两种查询结果分别排序,不知道能不能用一句sql查询语句实现??
当然我知道如果分两次查询并一前一后列出当然很容易实现,但我觉得那样可能就拖慢了速度,请问大家我该怎么做呢??举个例子,假如是如下的语句,应该怎么样改写呢?
strSQL="select * from Product_Info where (nameCn like '%"& KeyWord &"%' or ContentCn like '%"& KeyWord &"%') order by ID desc"
请各位大侠多多指教!谢谢!!
strSQL="SELECT *, a.maxID, a.CorpName, a.thetotal FROM (SELECT MAX(ID) AS maxID, dbo.GetCorpName(UserID) AS CorpName, COUNT(*) AS thetotal FROM Product_Info WHERE (nameCn LIKE '%" & KeyWord & "%' OR ContentCn LIKE '%" & KeyWord & "%') GROUP BY UserID) a INNER JOIN Product_info b ON a.maxID = b.ID"
--------------------------------------------------------------------------
另外我还想请教一下(另外发了一个帖子但没人理:):
现在做一个搜索结果页面,需要把标题含有关键字的条目排在前面,而把内容含有关键字的条目排在后面,请问大家这个能不能用一句sql查询语句实现?假如再给这两种查询结果分别排序,不知道能不能用一句sql查询语句实现??
当然我知道如果分两次查询并一前一后列出当然很容易实现,但我觉得那样可能就拖慢了速度,请问大家我该怎么做呢??举个例子,假如是如下的语句,应该怎么样改写呢?
strSQL="select * from Product_Info where (nameCn like '%"& KeyWord &"%' or ContentCn like '%"& KeyWord &"%') order by ID desc"
请各位大侠多多指教!谢谢!!
#8
还有一个类似的问题,我要从两个表中调出不同的内容(注意是不同的内容),但我需要把这两个表的内容在一起显示:一条一条的来,每一条只是来自一个表。
当然,我可以先调一个表,把它的条目全部列出后再调另外一个表。但我想知道的是我能不能把它们来一同分页呢?就是说,假如以20条来分页,搜索第一个表有15个符合,第二个表有45个符合,那么总共就三页,请问我能不能把这两个表调出的内容放在这三页来显示呢??
还有一种要求更高的,就是这两个表调出的条目交叉排列,比如按上一楼所说的那样交叉排列,请问这样能做到吗?
当然,我可以先调一个表,把它的条目全部列出后再调另外一个表。但我想知道的是我能不能把它们来一同分页呢?就是说,假如以20条来分页,搜索第一个表有15个符合,第二个表有45个符合,那么总共就三页,请问我能不能把这两个表调出的内容放在这三页来显示呢??
还有一种要求更高的,就是这两个表调出的条目交叉排列,比如按上一楼所说的那样交叉排列,请问这样能做到吗?
#9
没有高手帮帮忙吗??
#10
select field1,field2,field3 from table1
union
select field4,field5,field6 from table2
上面我说的那两种方法,第一种不能用么?我试了一下,应该是第一种方法效率比较高
union
select field4,field5,field6 from table2
上面我说的那两种方法,第一种不能用么?我试了一下,应该是第一种方法效率比较高
#11
现在做一个搜索结果页面,需要把标题含有关键字的条目排在前面,而把内容含有关键字的条目排在后面,请问大家这个能不能用一句sql查询语句实现?假如再给这两种查询结果分别排序,不知道能不能用一句sql查询语句实现??
select field1,field2,field3 from table1 where title like '%key%'
union
select field1,field2,field3 from table2 where content like '%key%'
不过注意用union对查询速度可能影响很大
select field1,field2,field3 from table1 where title like '%key%'
union
select field1,field2,field3 from table2 where content like '%key%'
不过注意用union对查询速度可能影响很大
#12
好的,谢谢dreamover(梦醒了) 这位朋友,我再试试!
#13
问题描述很累,让人不太愿意看。
你应该把几个字段列出来,放几条数据,然后说出你要的结果就行了。
你应该把几个字段列出来,放几条数据,然后说出你要的结果就行了。
#14
现在做一个搜索结果页面,需要把标题含有关键字的条目排在前面,而把内容含有关键字的条目排在后面,请问大家这个能不能用一句sql查询语句实现?假如再给这两种查询结果分别排序,不知道能不能用一句sql查询语句实现??
select field1,field2,field3 from table1 where title like '%key%'
union
select field1,field2,field3 from table2 where content like '%key%'
------------------------------------------------------------------------------------
这种方法,思路很清楚,但实际上我的检验结果表明,此方法对排序好像不起作用
select field1,field2,field3 from table1 where title like '%key%'
union
select field1,field2,field3 from table2 where content like '%key%'
------------------------------------------------------------------------------------
这种方法,思路很清楚,但实际上我的检验结果表明,此方法对排序好像不起作用
#15
select 1 as ct,field1,field2,field3 from table1 where title like '%key%'
union
select 2 as ct,field1,field2,field3 from table2 where content like '%key%'
order by ct,field1,field2,field3
union
select 2 as ct,field1,field2,field3 from table2 where content like '%key%'
order by ct,field1,field2,field3