UNION из 2 sql запросов с IN () — ORDER BY не работает должным образом

Я использую WordPress. Есть много продуктов на сайте. На странице есть фильтр сортировки цен (от низкого к высокому и от высокого к низкому).

Дело в том, что у меня есть товары, цены на которые указаны не цифрами, а всего лишь текстами (т.е. P.O.R.). Требуется, чтобы у меня были эти продукты в конце результатов в обоих случаях.

Мой код требует использовать SQL-запрос, а не get_posts () и т. Д … Итак, я построил 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;

Проблема в том, что порядок не работает должным образом. Это из-за второго запроса, так как, когда я оставляю только первый запрос, он упорядочивается правильно в обоих случаях.

0

Решение

Вы не можете использовать order by во внутреннем запросе при использовании соединения.
Я сделал некоторые изменения, это должно работать ..

$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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector