一个很复杂的 MYSQL 查询排列场景下的实现问题

2015-03-07 18:38:07 +08:00
 heat
一个产品包含了

货号 仓库 尺码 颜色 数量 等数据
MYSQL中也是按照这样的字段来进行存储的,但是有相同货号,不相同仓库,不同尺码的情况

现在我需要SELECT出的数据格式需求是

条目1——货号001 尺码 颜色 数量
————货号001 仓库002 尺码1的数量 尺码2的数量 尺码3的数量
条目2——货号002 尺码 颜色 数量
————货号002 仓库002 尺码1的数量 尺码2的数量 尺码3的数量
————货号002 仓库003 尺码1的数量 尺码2的数量 尺码3的数量
条目3——货号003 尺码 颜色
————货号003 仓库003 尺码1的数量 尺码2的数量 尺码3的数量
....

也就是将相同货号的货品合并起来然后分支出不同的仓库和不同的尺码
请问我要怎么写SELECT语句
我想应该是要写多层,效率最好的办法是什么?
1761 次点击
所在节点    问与答
8 条回复
lk09364
2015-03-07 19:44:04 +08:00
依我对你这篇文章的理解……

> 一个表里包含了:条目、货号、仓库、尺码、颜色、数量等字段来进行存储的,但是有相同货号,不相同仓库,不同尺码的情况。

所以,最好的方法是 SELECT * FROM `table` WHERE `货号`="001"
heat
2015-03-07 19:51:04 +08:00
@lk09364 恩,我也是这样想,但是效率貌似很低,要先遍历出所有货号
然后再写一个子遍历查询...
lk09364
2015-03-07 19:55:25 +08:00
@heat 等等……你需要SQL 输出的资料直接是字串吗?……
lk09364
2015-03-07 19:58:07 +08:00
@heat
抱歉,说的不清楚。

你需要直接输出如下字串?
1. "条目1——货号001 尺码 颜色 数量"
2. "————货号001 仓库002 尺码1的数量 尺码2的数量 尺码3的数量"
……
用空格分隔,条目号码后输出『——』,之后尺码数量的资料就需要前置『————』这个东西?
lk09364
2015-03-07 19:58:56 +08:00
@lk09364 抱歉,大概是我理解力不足,实在理解不到这条问题。
heat
2015-03-07 20:05:44 +08:00
@lk09364 是我描述的有问题,用SELECT 语句写出来可能你看的更清楚

先搜出所有的货号:
SELECT * FROM tbl GROUP BY 货号 ORDER BY 自增ID
然后遍历
然后子查询是 SELECT * FROM tbl WHERE 货号=上一个查询结果遍历出的货号 ORDER BY 自增ID

这样的话就是第一层遍历的每个查询结果都要嵌套一个子查询。。。感觉效率非常低
luin
2015-03-07 20:09:01 +08:00
为啥不在客户端做?
lk09364
2015-03-07 20:26:59 +08:00
@heat 原来如此。第1条语句和第2条语句表格名都是tbl?
这样的话ORDER BY 会不会方便你输出?

> SELECT * FROM tbl ORDER BY 货号
货号 仓库 尺码 颜色 数量
0   1  4  4  4
0   1  5  5  5
1   1  4  4  4
1   1  5  5  5
1   1  6  6  6

这样的话你就可以在客户端方便地整理format了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/175182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX