2016-12-27 7 views
3

複数のテーブルからMYSQLの結果をソートする方法は何ですか?MySQLの複数のテーブルから製品価格を並べ替えます

私は2つのテーブルを持っています。最初:

"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.'id'、IDとしてp.'id'、価格として.v.'price_sale'を返します。store_productsから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値は、このクエリは、最初の製品の最低ordering値を探します常に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 

た場合、これは、クエリになります。その後、あなたの結果に価格に参加するためにそれを使用する:

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]; 
関連する問題