что не удается в этом запросе MYSQL

#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