首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何根据点击次数排序 [已结贴,结贴人:wayne23]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wayne23
    • 等级:
    发表于:2008-05-06 09:36:21 楼主
    有一个产品表(t_Product),一个点击率表(t_Click)记录该产品的点击次数,请问如何按点击率大小来给产品排序?

    表结构如下:

    t_Product表

    proID   proName
      1      产品1
      2      产品2
      3      产品3
    ……

    t_Click表

    clickID  proID  clickRate(点击次数)
       1       1        57
       2       2        22
       3       3        110

    PS:按照上面的情况,按点击率排序后产品ID的顺序应该是3,1,2
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-05-06 09:38:471楼 得分:0
    order by 一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 09:39:412楼 得分:5
    order by clickRate
    ?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-05-06 09:39:463楼 得分:5
    select a.proid,a.proname,b.clickrate
    from t_product a
     join t_click b
        on a.proid=b.proid
    order by b.clickrate desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 09:41:164楼 得分:5
    SQL code
    create table t_Product(proid int,proname varchar(10)) insert into t_Product values(1,'产品1') insert into t_Product values(2,'产品2') insert into t_Product values(3,'产品3') create table t_Click(clickid int,proid int,clickrate int) insert into t_Click values(1,1,57) insert into t_Click values(2,2,22) insert into t_Click values(3,3,110) select a.* from t_Product a left join t_Click b on a.proid=b.proid order by b.clickrate desc proid proname ----------- ---------- 3 产品3 1 产品1 2 产品2 (3 行受影响)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fuanwei
    • 等级:
    发表于:2008-05-06 09:41:585楼 得分:5
    SQL code
    select t_Product.proName ,t_Click.proID from t_Click left join t_Product on t_Product.proID=t_Click.proID order by t_Click.clickRate desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 09:42:156楼 得分:5
    SQL code
    select a.proID, a.proName, isnull(b.clickRate, 0) as clickRate from t_Product a left join t_Click b on a.proID = b.proID order by isnull(b.clickRate, 0) desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 09:43:017楼 得分:0
    倒序:order by clickRate desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-05-06 09:45:458楼 得分:5
    SQL code
    create table t_Product(proid int,proname varchar(10)) insert into t_Product values(1,'产品1') insert into t_Product values(2,'产品2') insert into t_Product values(3,'产品3') create table t_Click(clickid int,proid int,clickrate int) insert into t_Click values(1,1,57) insert into t_Click values(2,2,22) insert into t_Click values(3,3,110) select m.* , n.* from t_Product m, t_Click n where m.proid = n.proid order by n.clickrate desc drop table t_Product , t_Click /* proid proname clickid proid clickrate ----------- ---------- ----------- ----------- ----------- 3 产品3 3 3 110 1 产品1 1 1 57 2 产品2 2 2 22 (所影响的行数为 3 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wayne23
    • 等级:
    发表于:2008-05-06 10:22:599楼 得分:0
    我是楼主,不好意思补充一下,有一点我忘了说,我这个是在存储过程里定义的,前面已经定义语句成
    declare @condition varchar(400)
    declare @order varchar(400)
    declare @sql varchar(2000)
    ……
    set @condition='1=1'(构建条件字符串)
    ……
    set @order = ''(构建排序字符串)
    ……
    set @sql = 'select * from t_Product where ' + @condition + 'order by ' + @order

    exec(@sql)

    结构已经写成这样了,请问怎么样写这个@order语句呢?麻烦大家帮帮忙
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sp4
    • 等级:
    发表于:2008-05-06 11:01:3410楼 得分:0
    declare @condition varchar(400)
    declare @order varchar(400)
    declare @sql varchar(2000)
    ……
    set @condition='1=1'(构建条件字符串)
    ……
    set @order = ' t_Click.clickRate desc'(构建排序字符串)
    ……
    --set @sql = 'select * from t_Product where ' + @condition + 'order by ' + @order
    set @sql = 'select t_Product.* from t_Product inner join t_Click on t_Product.proID=t_Click.proID where ' + @condition + 'order by ' + @order

    exec(@sql) 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sp4
    • 等级:
    发表于:2008-05-06 11:02:5511楼 得分:20

    还有where 后的条件尽量不要出现1=1,1>0 之类的懒惰写法,很是影响查询效率
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sp4
    • 等级:
    发表于:2008-05-06 11:06:1512楼 得分:0

    也就是尽量定义个join变量最好

    declare @condition varchar(400)
    declare @order varchar(400)
    declare @sql varchar(2000),@join varchar(1000)
     
    set @condition='1=1'--(构建条件字符串)
    set @order = ' t_Click.clickRate desc'--(构建排序字符串)
    set @join =' inner join t_Click on t_Product.proID=t_Click.proID '
    set @sql = 'select t_Product.* from t_Product '+@join+' where ' + @condition + 'order by ' + @order

    exec(@sql) 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 16:21:1613楼 得分:0
    select a.proid,a.proname,b.clickrate 
    from t_product a , t_click b 
    where a.proid=b.proid 
    order by b.clickrate desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 10:03:5714楼 得分:0


    引用 9 楼 wayne23 的回复:
    我是楼主,不好意思补充一下,有一点我忘了说,我这个是在存储过程里定义的,前面已经定义语句成 
    declare @condition varchar(400) 
    declare @order varchar(400) 
    declare @sql varchar(2000) 
    …… 
    set @condition='1=1'(构建条件字符串) 
    …… 
    set @order = ''(构建排序字符串) 
    …… 
    set @sql = 'select * from t_Product where ' + @condition + 'order by ' + @order 

    exec(@sql) 

    结构已经写成这样了,…


    按照大家给的方法拼就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 10:58:5815楼 得分:0
    现在什么都不懂的,也可以上来冒充专家,随便放几句啊 


    有时间去看看本人纯C语言开发的网站长长见识吧: 

    http://cangzhuo.com
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved