1

解決済み

以下の私の答えを参照してください。

バックグラウンド

禅カートに精通している人なら誰でも、世界で最も無意味な製品ソートオプション、別名アルファドロップダウンソーターが付属していることを知っているでしょう。

基本的に、これにより、最初の文字/数字で製品を選択できるようになります。さて、私が買い物をしているとき、アイテムの開始文字が有用な基準になることはめったにないので、追加された日付、価格、および製品名でソートする、より有用な製品ソーターを作成しようとしています。次に、属性カテゴリに基づいてフィルタリングします。

問題

だから私は、価格以外のすべてに取り組んでいる自分のクエリを実行するようにソーターを強制することができました。

これが、値下げのために現在設定されているSQLによって生成されたものです。

SELECT DISTINCT p.products_id, p.products_type, p.master_categories_id
               ,p.manufacturers_id, p.products_price, p.products_tax_class_id
               ,pd.products_description
               ,IF(s.status = 1, s.specials_new_products_price, NULL)
                  AS specials_new_products_price
               ,IF(s.status =1, s.specials_new_products_price, p.products_price)
                  AS final_price
               ,p.products_sort_order
               ,p.product_is_call
               ,p.product_is_always_free_shipping
               ,p.products_qty_box_status

  FROM products p
  LEFT JOIN specials s on p.products_id = s.products_id
  LEFT JOIN products_description pd on p.products_id = pd.products_id
  JOIN products_to_categories p2c on p.products_id = p2c.products_id

  WHERE p.products_status = 1
    and pd.language_id = '1'
    and p2c.categories_id = '1'

  GROUP BY p.products_id
  ORDER BY final_price ASC 

ご覧のとおり、通常価格または特別価格(設定されている場合)のエイリアスである最終価格に基づいて並べ替えようとしています。これはphpmyadminを介して正常に機能します。残念ながら、これはzenカートでは機能しません。phpエラーが発生します。

PHP致命的なエラー:1054:「注文句」の不明な列「final_price」:: SELECT p.products_id、p.products_price_sorter、p.master_categories_id、p.manufacturers_id FROM products p LEFT JOIN specials s on p.products_id = s.products_id LEFT JOIN products_description pd on p.products_id = pd.products_id JOIN products_to_categories p2c on p.products_id = p2c.products_id WHERE p.products_status = 1 \ r \ n and pd.language_id = '1' \ r \ n and p2c.categories_id = ' 1'GROUP BY p.products_id ORDER BY final_price ASC in /var/www/includes/classes/db/mysql/query_factory.php on line 101

そこで、101行目を見て、データベース抽象化クラスのエラー処理メソッドを参照しています。誰かがここで何が間違っているのか、そして私がそれをどのように解決するのかについて何か考えを持っていますか?

4

2 に答える 2

1

'final_price'は、実際にはデータベースのフィールドではありません。これは、ショッピングカートオブジェクトの各ラインアイテムエントリの一部です。データベースを使用して、基本価格(属性によって価格設定されておらず、追加の価格設定属性がない製品の最終価格にもなります)で並べ替えることができます。

于 2013-02-08T18:29:26.110 に答える
0

これを見てくださった皆様、ありがとうございました。私はなんとかこれを解決することができました。理由はわかりませんが、エラーメッセージから、エイリアスがdb抽象化クラスに到達していないことに気付きました。ただし、途中でp.products_price_sorterを作成しています。だから私は使用して価格を並べ替えることができました:

ORDER BY p.products_price_sorter

これが誰かに役立つことを願っています

アップデート

これを機能させてうまく再生するために数日を費やした後、このプラグインはスコットウィルソンによって提案されました: http ://www.zen-cart.com/downloads.php?do = file&id = 1612 したがって、これを読んでいる場合は、チェックする価値があります-それは高度な検索とカテゴリページであなたの製品のカスタムソートを可能にします。

于 2013-02-08T17:58:59.753 に答える