mysql如何取每个分类前几条记录(排序),用子查询能实现吗?附图

mysql如何取每个分类前几条记录(排序),用子查询能实现吗?附图,第1张

select * from reports where first_class = 83 order by id desc limit 5

这样就能查询最新增加的5个分类为83的内容,不过,因为是查询最新的,所以,都以id俩排序,从最后插入的那个开始往前面查询的,也就是所谓的倒叙,显示五条,不足五条就显示全部了

我只模拟一个   输出 3条商品信息的效果了.

否则 文字又要超长了

CREATE TABLE sp_classify (

  cid  INT,

  cname  VARCHAR(10)

)

INSERT INTO sp_classify  VALUES(1,  '笔记本')

INSERT INTO sp_classify  VALUES(2,  '台式机')

INSERT INTO sp_classify  VALUES(3,  '超级本')

INSERT INTO sp_classify  VALUES(4,  '平板')

CREATE TABLE sp_goods (

   cid  INT,

   gtitle  VARCHAR(50)

)

INSERT INTO sp_goods VALUES(1,  '笔记本1')

INSERT INTO sp_goods VALUES(1,  '笔记本2')

INSERT INTO sp_goods VALUES(1,  '笔记本3')

INSERT INTO sp_goods VALUES(1,  '笔记本4')

INSERT INTO sp_goods VALUES(1,  '笔记本5')

INSERT INTO sp_goods VALUES(2,  '台式机1')

INSERT INTO sp_goods VALUES(2,  '台式机2')

INSERT INTO sp_goods VALUES(2,  '台式机3')

INSERT INTO sp_goods VALUES(2,  '台式机4')

INSERT INTO sp_goods VALUES(2,  '台式机5')

INSERT INTO sp_goods VALUES(3,  '超级本1')

INSERT INTO sp_goods VALUES(3,  '超级本2')

INSERT INTO sp_goods VALUES(3,  '超级本3')

INSERT INTO sp_goods VALUES(3,  '超级本4')

INSERT INTO sp_goods VALUES(3,  '超级本5')

INSERT INTO sp_goods VALUES(4,  '平板1')

INSERT INTO sp_goods VALUES(4,  '平板2')

INSERT INTO sp_goods VALUES(4,  '平板3')

INSERT INTO sp_goods VALUES(4,  '平板4')

INSERT INTO sp_goods VALUES(4,  '平板5')

SELECT

  resultName

FROM

(

SELECT  0  as  seqNo,  cid,  cname  as resultName FROM  sp_classify

UNION ALL

SELECT  CASE WHEN @cn != cid THEN @rownum:= 1 

        ELSE @rownum:= @rownum + 1  END  as  seqNo,  

@cn := cid AS cid,  

gtitle  as resultName  FROM  sp_goods,  (SELECT @rownum:=1) r, (SELECT @cn:=0) p

) subQuery

WHERE

  SeqNo <=3

ORDER BY

  cid,  seqNo

  

+------------+

| resultName |

+------------+

| 笔记本     |

| 笔记本1    |

| 笔记本2    |

| 笔记本3    |

| 台式机     |

| 台式机1    |

| 台式机2    |

| 台式机3    |

| 超级本     |

| 超级本1    |

| 超级本2    |

| 超级本3    |

| 平板       |

| 平板1      |

| 平板2      |

| 平板3      |

+------------+

16 rows in set (0.00 sec)

你需要 10行商品的, 就是简单把 sql 语句中的  WHERE   SeqNo <=3

修改为  WHERE   SeqNo <= 10 即可。

<?

/*应该加一个category表记录有多少个分类

cid name

1 显示器

2 CPU

3 硬盘

*/

$sqlstr = "select * from category order by cid"

$query = @mysql_query($sqlstr) or die(mysql_error())

while($thread=mysql_fetch_array($query)){ //获取一共有多少个分类

$cgroup[] = $thread

}

$result = array()

$total = array()

for($i=0$i<count($cgroup)$i++){ //将每个分类的记录保存在数组

$sqlstr = "select * from test where category='".$cgroup['name']."'"

$query = @mysql_query($sqlstr) or die(mysql_error())

while($thread=mysql_fetch_array($query)){

$result[$i][] = $thread

}

$total[$i] = count($result[$i])

}

rsort($total)

$num = $total[0]//获取最多产品的类别个数,用于循环显示

for($j=0$j<$num$j++){

for($i=0$i<count($cgroup)$i++){

if($result[$i][$j]){ //因不同类别的产品不同,因此用最多产品的类别的产品个数作循环总次数,如有部分产品不足,不显示

echo $result[$i][$j]['id'].','.$result[$i][$j]['name'].','.$result[$i][$j]['category']."\r\n"

}

}

}

?>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8649363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存