在利用php+mysql开发中,对表products进行select检索,products表结构如下
  Proid 产品ID auto_increment
  Product_name 产品名称
  Model 产品规格                            
  Price 产品金额            
  Description  说明及正文           
  Photo 图片
  Fuserid 发布产品的对应的会员的ID每个用户可发布20-50条产品信息  对应关键字的select检索结果集是已经OK了,问题是只需要找出匹配关键字的每个用户的最后5条信息,也就是在不需要临时表的帮助下,如何对sql检索select语句中按Proid字段desc筛选匹配关键字的每一个用户的最后5条信息?

解决方案 »

  1.   

    select top 5 from  (结果)a  order by proid asc
      

  2.   

    错了呵呵,在mysql里得用limit 5
      

  3.   

    问题补充如下:一个关键字,检索结果会有M个用户的,每个用户有N条以上信息的信息,假设N为10以上的数字,也就是如何得到M个用户每一个的满足检索条件的最后5条信息?想得脑子都有点糊了~:(
      

  4.   

    select * from (结果集合)a order by proid asc limit 5
      

  5.   

    select * from products order by proid desc limit 5;
      

  6.   

    select * from products where .... order by proid desc limit 5
      

  7.   

    本帖最后由 yueliangdao0608 于 2008-02-28 20:26:16 编辑
      

  8.   

    代码实例如下,检索valve关键词——
    sql语句执行如下:
    SELECT  `Proid`, `Product_name`, `Fuserid` FROM `products` 
    WHERE LOWER(`Product_name`) REGEXP BINARY '[[:<:]]valve[[:>:]]'
    ORDER BY `Proid` DESC 
    LIMIT 0 , 80;结果集如下:
    Proid Product_name       Fuserid
    2 API Gate Valve         volvo 
    3 Cast Steel Globe Valve volvo 
    4 Swing Type Check Valve volvo 
    6 Wafer Type Lift Check Valve volvo 
    201 Floating Ball Valve land_rover 
    202 Ball Valve land_rover 
    203 V Type Ball Valve land_rover 
    204 Three Way Ball Valve land_rover 
    208 Turnnion Ball Valve land_rover 
    209 Bellow Globe Valve land_rover 
    210 Bellows Globe Valve land_rover 
    211 Gate valve land_rover 
    212 Safety Valve land_rover 
    213 Gate valve land_rover 
    214 Safety Valve land_rover 
    215 Ball Valve Body land_rover 
    218 Lug Butterfly Valve land_rover 
    220 Adjust Butterfly Valve land_rover 
    221 Clamp Butterfly Valve land_rover 
    224 Check Valve land_rover 
    226 Swing Check Valve land_rover 
    227 Forged Steel Check Valve land_rover 
    230 Forged Steel Gate Valve land_rover 
    232 Forged Steel Globe Valve land_rover 
    233 Y Pattern Globe Valve land_rover 
    234 Carbon Steel RF End Gate Valve land_rover 
    235 Forged Steel Gate Valve land_rover 
    236 Flat Gate Valve land_rover 
    237 Gate valve land_rover 
    238 Gate valve land_rover 
    239 Forged Steel Globe Valve land_rover 
    240 Bellows Gate Valve land_rover 
    313 Sanitary Clamped Butterfly Valve puma 
    315 Sanitary Threaded Butterfly Valve puma 
    316 Sanitary three piece butterfly valve puma 
    317 Sanitary non-residue ball valve puma 
    319 Sanitary Welded Check Valve puma 
    320 Sanitary Threaded Check Valve puma 
    321 Sanitary non-residue ball valve puma 
    322 Sanitary All through ball valve puma 
    323 Clamped three piece sanitary ball valve puma 
    324 Sanitary Welded Check Valve puma 
    325 Sanitary Threaded Check Valve puma 
    326 Sanitary Diaphragm Valve puma 
    328 Pneumatic valve puma 结果集如上,这些信息分别归属三个用户,三个用户ID分别为volvo、land_rover、puma,我只想取得三个用户各自最后的5条信息,望高人指点…
      

  9.   

    yueliangdao0608 兄台的链接有点这个意思了,第二个示例使用了存储过程?深入研究一下先
      

  10.   

    你先把所有的用户查出来
    select * from products where Fuserid=‘XX’ order by proid desc limit 5
      

  11.   

    回socialism_programmer,这样也不是不可行,但因为用户表的增长,SQL的执行效率会不断降低,同时还考虑到后期跟其他多表的关联查询,想把多次的用一次的SQL查询替找,故才有顶楼的一问,谢谢关注:)
      

  12.   

    yueliangdao0608兄台的方法很好,很强大。
    通过实例程序已经搞定,现给分结帖。
      

  13.   

    我倒是能够给你一个sql,只是执行时间上有点慢,
    不过,用户少的话,速度应该还可以。