2017-11-03 6 views
0

私はwordpressを使用しています。ウェブサイトには多くの製品があります。ページには低価格から高価格、高価格から低価格の価格ソートフィルターがあります。IN()を使用した2つのSQLクエリのUNION - ORDER BYが正しく機能していません

価格は数字ではなく、単なるテキスト(例:P.O.R)の商品があります。どちらの場合も、結果の最後にこれらの製品が必要です。

私のコードでは、get_posts()などではなくsqlクエリを使用する必要があります。したがって、2つのクエリを作成しました。最初のクエリでは、テキストではない製品を取得しています。テキストが付いた製品を得る(最後になるように2番目のクエリでそれを行う)。ここに私のコードです:

$sql1 = "SELECT * FROM wp_posts AS table1 INNER JOIN (SELECT * FROM wp_postmeta WHERE 
meta_key = 'product_price' AND meta_value != 'P.O.R.' order by (meta_value + 0) ASC) AS 
table2 ON table1.ID = table2.post_id WHERE table1.ID IN ($currentActiveProductIds) AND 
table1.post_type = 'product-items' AND table1.post_status = 'publish'"; 

$sql2 = "SELECT * FROM wp_posts AS table1 INNER JOIN (SELECT * FROM wp_postmeta WHERE 
meta_key = 'product_price' AND meta_value = 'P.O.R.') AS table2 ON 
table1.ID = table2.post_id WHERE table1.ID IN ($currentActiveProductIds) 
AND table1.post_type = 'product-items' AND table1.post_status = 'publish'"; 

$sql = $sql1." UNION ".$sql2; 

問題は、順序正しく動作していないということです。それは、私が最初のクエリだけを残したときのように、両方のケースで適切に順序付けされているので、2番目のクエリのためです。

参加を使用しているときに、内側のクエリで順を使用することはできません

答えて

0

... 私はいくつかの変更を加えて、それが動作するはずです..私はあなたがちょうどいい、SQLから一部をorderbyの取り外しを参照する方法

$sql1 = "SELECT * FROM wp_posts AS table1 INNER JOIN (SELECT * FROM wp_postmeta WHERE 
meta_key = 'product_price' AND meta_value != 'P.O.R.') AS 
table2 ON table1.ID = table2.post_id WHERE table1.ID IN ($currentActiveProductIds) AND 
table1.post_type = 'product-items' AND table1.post_status = 'publish'"; 

$sql2 = "SELECT * FROM wp_posts AS table1 INNER JOIN (SELECT * FROM wp_postmeta WHERE 
meta_key = 'product_price' AND meta_value = 'P.O.R.') AS table2 ON 
table1.ID = table2.post_id WHERE table1.ID IN ($currentActiveProductIds) 
AND table1.post_type = 'product-items' AND table1.post_status = 'publish'"; 

$sql = $sql1." UNION ".$sql2; 
+0

?だから、あなたがorderby部分をやったところで、私はそれを見ませんか? @Lalit choudhary – aidadev

+0

あなたは最後のクエリで "order by"を使用することができます –

+0

私はそれを試みましたが、それは動作していません – aidadev

関連する問題