#mysql #sql
#mysql #sql
Вопрос:
Следующий запрос работает только тогда, когда у меня есть ссылка в таблице wm_purchased_products.purchased_article_id
но когда она пуста, mysql_num_rows возвращает 0
Запрос:
SELECT (SUM(wm_products_quantities.new_quantity) - SUM(wm_purchased_products.purchased_article_total) ) AS stock_restante,
wm_products_wall.nombre,
wm_products_wall.detalles,
wm_products_wall.price,
wm_products_wall.image_full,
wm_products_wall.fecha,
wm_products_wall.article_hashid
FROM wm_products_wall,
wm_products_quantities,
wm_purchased_products
WHERE wm_products_wall.categoria = '$new_rquery_xp'
AND wm_products_wall.article_hashid = wm_products_quantities.hashid_ref
AND wm_products_wall.article_hashid = wm_purchased_products.purchased_article_id
GROUP BY wm_products_wall.article_hashid
ORDER BY stock_restante ASC
Как построить этот запрос, чтобы он работал, когда у меня нет записи в таблице wm_purchased_products.purchased_article_id
Комментарии:
1. В чем проблема? Когда таблица пуста, у вас нет строки, соответствующей запросу, поэтому вы получаете 0.
2. Что вам нужно, так это левое соединение.
Ответ №1:
Ваш код FROM wm_products_wall, wm_products_quantities, wm_purchased_products
означает, что все три таблицы являются ВНУТРЕННИМ соединением друг с другом.(то есть каждая строка в первой таблице соединяется с каждой строкой во второй таблице и так далее.)
Вы можете разрешить wm_products_wall LEFT объединяться с wm_purchased_products, так что сделайте wm_purchased_products.
SELECT
(SUM(wm_products_quantities.new_quantity) - SUM(wm_purchased_products.purchased_article_total) ) AS stock_restante,
wm_products_wall.nombre, wm_products_wall.detalles, wm_products_wall.price,
wm_products_wall.image_full, wm_products_wall.fecha,
wm_products_wall.article_hashid
FROM wm_products_wall
LEFT OUTER JOIN wm_products_quantities
ON wm_products_wall.article_hashid = wm_products_quantities.hashid_ref
LEFT OUTER JOIN wm_purchased_products
ON wm_products_wall.article_hashid = wm_purchased_products.purchased_article_id
WHERE wm_products_wall.categoria = '$new_rquery_xp'
GROUP BY wm_products_wall.article_hashid
ORDER BY stock_restante ASC
Комментарии:
1. 1: Также полезно: codinghorror.com/blog/2007/10 /…
2. но!!! (СУММА (wm_products_quantities.new_quantity) — СУММА(wm_purchased_products.purchased_article_total) ) В качестве stock_restante не отображает никакого результата. wm_products_quantities.new_quantity = 885 и wm_purchased_products.purchased_article_total равно нулю. что не так, еще раз спасибо
3. Извините, я не заметил комментарий. Если таблица
wm_purchased_products
пуста,SUM(wm_purchased_products.purchased_article_total)
результатом должно быть NULL, в то время как число минус NULL получит значение NULL. Итак, мы можем изменить выражение stock_restante на(IFNULL(SUM(wm_products_quantities.new_quantity),0) - IFNULL(SUM(wm_purchased_products.purchased_article_total),0)) AS stock_restante