2012-06-12 54 views
0

我坐在这个SELECT语句与MySQL辅助选择

我有一个产品分成5种产品,每一个栏,告诉你应该有多少为了得到它的那个价格。

我要的是,举例来说,如果我命令54,我应该得到50

价格如果我订购100或101等。我应该得到100的价格。 。 等等。

这里是我的选择,到目前为止..

SELECT 
entity.entity_id AS "ID", 
entity.value AS "Name", 
qty_price.qty AS "Pcs", 
qty_price.value AS "Price" 
FROM `mg_catalog_product_entity_tier_price` qty_price 
JOIN `mg_catalog_product_entity_varchar` entity 
ON qty_price.entity_id = entity.entity_id 
WHERE entity.entity_id = 300 
AND entity.value = (SELECT name FROM `mg_catalog_product_flat_1` WHERE `mg_catalog_product_flat_1`.entity_id = entity.entity_id) 
LIMIT 10; 

编辑:这是在评论中提到到回复的截图: Screenshot of Statement and output

+4

也许你也可以解释你的表的样子 –

+2

欢迎来到StackOverflow。请尽量在写作质量上付出一点努力。这是一个专业的网站。 –

回答

1

你可能需要像这样(注意,我不是指您的确切表):

SELECT 
    item_id, 
    item_quantity, 
    (
     SELECT base_price 
     FROM prices p 
     WHERE 
      o.item_id = p.item_id AND 
      o.item_quantity >= p.base_quantity 
     ORDER BY p.base_quantity 
     LIMIT 1 
    ) FROM orders o 

以下订单是您的订单表上,它ITEM_ID和数量。价格是一个静态表,其数量为每件商品的item_id,数量和基准价格。因此,如果您的订单中有 17 6(意思是您要购买6件id = 17的产品)和17 1 3.50,17 5 3.29,17 100 3.01item_id, quantity, base_price),您将获得17 6 3.29

+0

试试看看这个:it-guiden.dk/downloads/SQL.png –

-1

您可能需要重新考虑你的表设计。您可能希望有一个mg_catalog_product_entity_tier_price表,其中列出了可以订购以获得该价格层级的最小和最大数量的项目。那么这个陈述很简单。

否则,这将涉及使用逻辑,如select max(prices.items_required) from prices where order_qty<items_required_for_tier。这将从订单项数量小于实际订单尺寸的价目表中找到最大的商品数量。

+1

我很抱歉,我的问题可能显得严重描述.. 我无法上传screeshot .. :( 我loooking到第一个答案的时候了。:) 我只是将屏幕截图上传到我自己的网络服务器,因为如果你看到SQL语句+结果,它会对你们所有人提供更多的信息 –

+0

你可能想评论一下原文,而不是我的回答。 在任何情况下,与base_quantity结合的'Limit 1'与使用max(base_quantity)相同。我仍然认为对于任何实际的查询来说这是一个坏主意,因为如果它被部署了,它将在大型数据集上运行速度要比在表中存储最大值和最小值项的速度慢得多。 –

+0

试试看看这个: http://it-guiden.dk/downloads/SQL.png –