0

私は4つのテーブルを持っています

  • 製品
  • 状態
  • 注文
  • 注文_製品。

次のクエリを使用すると、適切な結果が得られますが、正しい順序ではありません。つまり、結果はサブクエリによって取得されます。サブクエリの結果として結果の順序が必要です。

SELECT 
    p.products_id, p.products_image, p.products_tax_class_id,
    pd.products_name, if(s.status, s.specials_new_products_price,
    p.products_price) as products_price 
FROM
    products p LEFT JOIN specials s
        ON p.products_id = s.products_id, products_description pd 
WHERE
    p.products_status = '1' 
    AND p.products_id = pd.products_id 
    AND pd.language_id = '2' 
    AND p.products_id in (
        SELECT * from (
            SELECT
                distinct(op.products_id) 
            FROM
                orders_products op,orders o 
            WHERE
                op.orders_id=o.orders_id 
                AND o.customers_id='27' 
            ORDER BY
                o.date_purchased 
            DESC LIMIT 0,10 
        ) AS temptable
    )
4

1 に答える 1

0

外側の SELECT には ORDER BY pd.products_name があります。それが適用されるべきものであり、それだけです。

サブクエリ ORDER BY は実際には問題になりません。それを削除しても同じ結果が得られるはずです。

pd.products_name とは異なる並べ替え順序が必要な場合は、必要な列で ORDER BY する必要があります。あなたの場合、orders.date_purchased をクエリの主要部分に移動して、並べ替えに使用できるようにする必要があります。クエリを反転します。つまり、必要なものから始めて、他のすべてを関連付けます。

    SELECT MAX(o.date_purchased) AS date_purchased, DISTINCT (op.products_id) AS products_id
    p.products_id, p.products_image, p.products_tax_class_id, p.products_price
    pd.products_name,
    IF (s.status, s.specials_new_product_price, p.products_price) AS products_price

    FROM orders o

    LEFT JOIN orders_products op USING (orders_id)
    LEFT JOIN products p USING (products_id)
    LEFT JOIN products_description pd USING (products_id)
    LEFT JOIN specials s USING (products_id)
    WHERE o.customers_id = '27'
    AND p.products_status = 1
    AND pd.language_id = 2
于 2012-10-03T06:28:13.393 に答える