mysql 取出5条不同类目下最新的商品

作者&投稿:陟敬 (若有异议请与网页底部的电邮联系)
含有分隔符的字段 1|2|3|4|5|4|5 要求用mysql命令分别取出~

substr(该字段名,1,(instr(该字段名,'|',1,1)-1)),
substr(该字段名,(instr(该字段名,'|',1,1)+1),((instr(该字段名,'|',1,2)-instr(该字段名,'|',1,1))),
substr(该字段名,(instr(该字段名,'|',1,2)+1),((instr(该字段名,'|',1,3)-instr(该字段名,'|',1,2))),
substr(该字段名,(instr(该字段名,'|',1,3)+1),((instr(该字段名,'|',1,4)-instr(该字段名,'|',1,3))),
substr(该字段名,(instr(该字段名,'|',1,4)+1),((instr(该字段名,'|',1,5)-instr(该字段名,'|',1,4))),
substr(该字段名,(instr(该字段名,'|',1,5)+1),((instr(该字段名,'|',1,6)-instr(该字段名,'|',1,5))),
substr(该字段名,(instr(该字段名,'|',1,6)+1),((instr(该字段名,'|',1,7)-instr(该字段名,'|',1,6)))
这是不确定你两个'|'之间数据的长度的语句,如果你确定分隔符之间就1个数字话可以简洁很多..

是 每个 cid 分类里面, 取5个? 还是 每个 cid 分类里面, 各取一个?

看看你的问题, 不是很明白。
要不我举个例子, 确认一下你的需求。

例如你的 item 表有下面这些数据。
分类代码cid 商品代码num_iid 时间dateline
1 1 2013-05-01
1 2 2013-05-02
1 3 2013-05-03
1 4 2013-05-04
1 5 2013-05-05
1 6 2013-05-06
2 7 2013-05-07
2 8 2013-05-08
2 9 2013-05-09
2 10 2013-05-10
2 11 2013-05-11
2 12 2013-05-12
......

很多个分类, 很多个商品, 很多个时间
......

你预期的结果是

1 2 2013-05-02
1 3 2013-05-03
1 4 2013-05-04
1 5 2013-05-05
1 6 2013-05-06

2 8 2013-05-08
2 9 2013-05-09
2 10 2013-05-10
2 11 2013-05-11
2 12 2013-05-12

每个分类都要显示
但是只显示当前分类下的 最新的 5个商品

你是不是要这样的效果呀?

比如:
分类表为 categories ,商品表为 products ,categories表中的 categories_id 与 products 的 categories_id 关联。
products_date_added 字段为 products 表中的商品添加时间字段

SQL语句如下:

SELECT temp_table . *
FROM (

SELECT p.*
FROM `products` p
ORDER BY p.products_date_added DESC

) temp_table
GROUP BY temp_table.categories_id
ORDER BY temp_table.products_date_added DESC
LIMIT 0 , 5

上面的SQL语句解释如下:
temp_table 临时表的名字
先把所有的商品按添加时间倒排序,再以分类表中的categories_id分组,然后再把得到的结果按添加时间倒排序,最后取前5条数据。

分开写呗,才5个类目。先把类目查出来,5行而已,然后再执行5条独立的sql,建议status和dateline都有索引。

如果你担心多条查询有连接数据库的损失的话可以在mysql那边写一个函数就行了

第一条,为什么要用这种语句呢?浪费资源。


看一下这样的语句是否达到预定要求


select `cid` from `item` where `status`=0 group by `cid`


第二条的话,建议直接取第一条里的cid,再循环取一下,这样更高效。



多表查询好一点。。where条件可以


紫阳县15346981152: mysql 取出5条不同类目下最新的商品 -
达荣妇炎: 看看你的问题, 不是很明白. 要不我举个例子, 确认一下你的需求.例如你的 item 表有下面这些数据. 分类代码cid 商品代码num_iid 时间dateline 1 1 2013-05-01 1 2 2013-05-02 1 3 2013-05-03 1 4 2013-05-04 1 5 2013-05-05 1 6 2013-05-...

紫阳县15346981152: mysql如何每个分类取最新一条数据 -
达荣妇炎: 先排序 再 用 group by 取假设 table xxxselect * from (select * from xxx order by time desc ) a group by type order by type

紫阳县15346981152: 大神们 帮帮我啊..mysql 分组后取每组最新一条数据 -
达荣妇炎: 关联查询可以解决你的问题,用到group by分组、limit 1即可1. 每个类型下最新的商品 每个类型,就是每个商品种类 假设商品表表名为A,种类表为B假设商品种类表的主键为type_id group by B.type_id2. 关联查询:两张表肯定有关系,没猜错的话就是商品的种类id sql语句为:select A.* from A left join B on a.product_type_id = B.type_id group by B.type_id order by A.id desc limit 13. 自己组织一下,不难的

紫阳县15346981152: mysql怎么取分组后最新的一条 -
达荣妇炎: 可直接用嵌套查询. 方法如下: 如数据: id name 1 a 1 b 2 c 2 d 3 e 3 f 3 g 3 h select count(t.counts) from(select id,count(*) counts from 表名 group by id) t这样得到的结果就是3.

紫阳县15346981152: mysql如何取每个分类前几条记录(排序),用子查询能实现吗?附图 -
达荣妇炎: select * from reports where first_class = 83 order by id desc limit 5; 这样就能查询最新增加的5个分类为83的内容,不过,因为是查询最新的,所以,都以id俩排序,从最后插入的那个开始往前面查询的,也就是所谓的倒叙,显示五条,不足五条就显示全部了

紫阳县15346981152: mysql从数据表中随机提取多条不同记录 -
达荣妇炎: mysql 使用 ORDER BY rand() 实现随机获取 mysql> select * FROM sale_report LIMIT 0, 10;+---------------------+-----------+------------+ | SALE_DATE | SALE_ITEM | SALE_MONEY |+---------------------+-----------+------------+ | 2009-01-01 00:00:00 | A | ...

紫阳县15346981152: mysql怎样每次读取5条数据? -
达荣妇炎: 需要知道偏移量的,并且需要数据是有序的,select * from table where id >= (偏移量) limit (需要取出的数量) 严谨起见,建议再多一步排序 select * from table where id >= (偏移量) order by id asc limit (需要取出的数量)

紫阳县15346981152: mysql取出前几条数据的hibernate配置 -
达荣妇炎: 楼上的没错. 不过也可以getSession().createQuery("from News as n order by n.date desc ").setFirstResult(0).setMaxResults(5).list(); 这样的好处是跨数据库,不论你是什么数据库,该语句都有效.但如果用limit只对MySQL有效

紫阳县15346981152: Mysql 如何取符合条件的最新的N条数据呢 -
达荣妇炎: 可以先做排序再用limit n ,取出你想要的数据,具体逻辑要按照你的业务来做,欢迎追问,满意请采纳,多谢

紫阳县15346981152: JSP+Mysql对数据库进行查询的时候,怎么取出当前最新更新的记录 -
达荣妇炎: ID 一般可以设置为自动增长.或者日期都可以啊. 不过一般都是自动增长的. 查询的时候倒叙查询就来就是最新的啊!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网