2016-12-27 90 views
3

从多个表中排序MYSQL结果的方法是什么?排序MySQL中多个表的产品价格

我有两个表。第一:

“store_products” 表:

+----+-----------+ 
| id | name  | 
+----+-----------+ 
| 1 | Product 1 | 
| 2 | Product 2 | 
| 3 | Product 3 | 
+----+-----------+ 

这里,我把产品名称。其他表包含不同的产品变型价格:

“store_products_variants”表:

+-----+------------+-------------+-------------+ 
| id | product_id | price_sale | ordering | 
+-----+------------+-------------+-------------+ 
| 5 | 1   | 06.00  | 2   | 
| 6 | 1   | 32.00  | 3   | 
| 11 | 1   | 56.00  | 1   | 
| 14 | 2   | 09.00  | 1   | 
| 44 | 3   | 15.00  | 1   | 
+-----+------------+-------------+-------------+ 

我需要建立在价格排序(最低和最高),仅使用第一个变种 - 柱“顺序进行排序“来自”store_products_variants“表。

从上面的例子,结果应该是:

+---+------------+---------------+ 
| 1 | Product 2 | (price 09.00) | 
| 3 | Product 3 | (price 15.00) | 
| 2 | Product 1 | (price 56.00) | 
+---+------------+---------------+ 

这是可能在MySQL?

+0

你可以通过使用'JOIN'来实现它。 [http://dev.mysql.com/doc/refman/5.7/en/join.html](http://dev.mysql.com/doc/refman/5.7/en/join.html) –

+0

我试过SELECT p.'name'作为名称,p.'''作为id,.v.'price_sale'作为价格FROM'store_products' p LEFT JOIN'store_products_variants' v ON v.'product_id' = p.'id' ORDER BY v .price_sale' ASC。但正在采取所有变种 – Jarek

+0

结果显示中的第一列是什么? 1,3,2看起来有点随意 – Philipp

回答

2

使用ordering列加入正确的变种到产品。

这将是查询,如果正确ordering pH值总是在1

SELECT 
    products.name, 
    variants.price_sale 
FROM store_products AS products 
INNER JOIN store_products_variants AS variants 
    ON variants.product_id = products.id 
    AND variants.ordering = 1 
ORDER BY variants.price_sale ASC 

这个查询将首先查找产品的最低ordering值。然后用它来加入价格上你的结果:

SELECT 
    products.name, 
    variants.price_sale 
FROM 
    store_products AS products 
INNER JOIN (
    SELECT 
     product_id, 
     MIN(ordering) AS ordering 
    FROM 
     store_products_variants 
    GROUP BY 
     product_id 
) AS variantOrdering 
    ON variantOrdering.product_id = products.id 
INNER JOIN store_products_variants AS variants 
    ON variants.product_id = variantOrdering.product_id 
    AND variants.ordering = variantOrdering.ordering 
ORDER BY 
    variants.price_sale ASC 
+0

问题是第一个“排序”并不总是1 – Jarek

+0

是的,这是我们需要知道的东西:p所以它只是最低的排序值?应该有一些标准,否则我们不得不猜测。 – Philipp

+0

是的,只需要最低订购价值 – Jarek

0

是的,这是可能的。尝试使用JOIN命令,并在每个表的ID上加入JOIN。

0

你好这是可能的,请使用此查询

SELECT p.id,p.name,spv.price_sale 
from products p 
    INNER JOIN store_products_variants spv ON spv.product_id = p.id 
where spv.ordering = 1 
group by p.id 
order by spv.price_sale asc 

我认为它给出结果你想要什么

+0

根本不工作 – Jarek

+0

请检查更新后的答案吗它的帮助 –

+0

还没有工作 – Jarek

1
select t.* from(
select t1.[id], t1.[name], 
'(price ' + cast(max(t2.[price_sale]) as varchar(50)) + ')' as [price] 
from [#store_products] t1 
left join [#store_products_variants] t2 
on t1.[id] = t2.[]product_id 
group by t1.[id], t1.[name] 
)t 
Order by len(t.[price]), t.[price]; 
相关问题