Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 针对多个产品的最佳查找表查询?_Mysql - Fatal编程技术网

Mysql 针对多个产品的最佳查找表查询?

Mysql 针对多个产品的最佳查找表查询?,mysql,Mysql,如果我有一个包含如下字段的查找表: id、颜色、尺寸、价格 我可以使用以下工具轻松获得特定颜色的所有尺寸/价格: SELECT size_id, price from TABLE where color_id = 2 但是,如果我想显示这样的价格表: red blue green yellow xs 1.20 1.20 1.29 1.39 sm 1.40 1.40 1.49 1.59 md 1.40 1.40 1

如果我有一个包含如下字段的查找表:

id、颜色、尺寸、价格

我可以使用以下工具轻松获得特定颜色的所有尺寸/价格:

SELECT size_id, price from TABLE where color_id = 2
但是,如果我想显示这样的价格表:

    red     blue    green   yellow

xs  1.20    1.20    1.29    1.39
sm  1.40    1.40    1.49    1.59
md  1.40    1.40    1.19    1.59
lg  1.55    1.55    1.80    1.94
xl  1.55    1.55    1.80    1.99
xx  2.01    2.05    2.40    2.68 
是否有一种方法可以在不查询每种颜色的情况下执行此操作?还是有更好的方法来组织数据

谢谢你的帮助

select size_id, sum(if(color_id=1,price,0)) c1, sum(if(color_id=2,price,0)) c2, sum(if(color_id=3,price,0)) c3, sum(if(color_id=4,price,0)) c4 from TABLE group by size_id

如果没有可变的颜色数,这至少可以很好地工作。

如果不包含WHERE子句,那么查询应该可以工作。如果没有WHERE子句,所有值都将返回?删除WHERE子句可以避免使用该子句。谢谢!那会很有效的。我尝试了许多徒劳的事情,但我甚至不知道这样做是否有可能。至于颜色的可变数量,我只需查询活动颜色列表中的一个计数,并根据需要动态生成SQL。@Shawn:哈哈……是的……这通常是正确的,但CFrei的方法是将所有内容都放在一个整洁的行中(与表布局相匹配)不必在PHP端高效地解析整个结果(行数为4倍),并通过将所有大小与表行匹配来组装表数据。@CFrei:效果很好,但是如果我有四种以上的颜色和六种大小,如何使查询不包含它们呢。事实上,结果正确地给出了与颜色1、2、3和4匹配的每个尺码的定价……但它也包括了与颜色1、2、3和4不匹配的所有尺码,并且c1、c2、c3和c4的价格为0。换句话说,如果大小对颜色1,2,3或4无效…请不要包含它。修改查询:
…从表中,颜色在(1,2,3,4)组中按…