Mysql - если значение не существует, используйте другую таблицу - PullRequest
0 голосов
/ 26 марта 2019

я пытаюсь выполнить запрос, чтобы отобразить все продукты клиенты могут иметь скидки (при входе в систему) или просто используют стандартную цену:

таблицы: product хочу отобразить все производитель, productRange, веб-код, описание, код поставщика, priceExVat и т. д.

standardTermsPricing (не содержит идентификатора пользователя) supplier , supplierCode , Amount

supplierdiscounts supplier(supplierCode) , user , Amount

productdiscounts user , товар (веб-код), Сумма ``

Я знаю, что пользователь y127 работает на каком-то уровне, но если я попробую один z999, его нет в таблице supplierdiscounts или productDiscounts, так что никаких результатов.

мое текущее предложение выбора не работает, оно дает некоторые результаты, но не то, что я хочу ... какие-либо идеи?

конечный результат Я использую PHP mysqli_query для зацикливания результатов для отображения клиенту и экспорта файла CSV - но это еще одна проблема !!

большое спасибо, Ян

SELECT  
p.name,  
p.manufacturer, 
p.productRange, 
p.webcode, 
p.description, 
p.supplierCode, 
p.priceExVat, 
stp.amount 'standard discount amount', 
sd.amount 'supplier discount amount',
pd.amount 'product discount amount',
sd.user
FROM
products p
  JOIN standardTermsPricing stp ON p.supplierCode  =  stp.supplierCode 
  JOIN supplierdiscounts sd ON p.supplierCode = sd.supplier 
  JOIN productDiscounts pd ON p.webcode = pd.product  
  WHERE  sd.user = 'Y127'


Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

исправили это, большое спасибо - у нас было несколько дублирующихся продуктов в БД.

SELECT 
p.name,  
p.manufacturer, 
p.productRange, 
p.webcode, 
p.description, 
p.supplierCode, 
p.priceExVat,
sd.amount sdamount,
pd.amount pdamount,
stp.amount stpamount
FROM products p
INNER JOIN standardTermsPricing stp ON p.supplierCode  =  stp.supplierCode 
LEFT JOIN supplierdiscounts sd ON p.supplierCode = sd.supplier  AND sd.user = 'C456' 
LEFT JOIN productDiscounts pd ON p.webcode = pd.product   AND sd.user = 'C456' 
WHERE sd.user = 'C456' 
UNION
SELECT 
  p.name,  
p.manufacturer, 
p.productRange, 
p.webcode, 
p.description, 
p.supplierCode, 
p.priceExVat,
NULL,
NULL,
stp.amount stpamount
FROM products p
INNER JOIN standardTermsPricing stp ON p.supplierCode  =  stp.supplierCode
0 голосов
/ 26 марта 2019

JOIN совпадает с INNER JOIN, поэтому возвращаются только совпадающие комбинации.Если вам нужны все строки, в том числе и при отсутствии совпадающих строк в таблицах скидок, вам нужно, например, LEFT JOIN:

...
FROM 
    products p
INNER JOIN standardTermsPricing stp 
  ON p.supplierCode  =  stp.supplierCode 
LEFT JOIN supplierdiscounts sd 
  ON p.supplierCode = sd.supplier 
LEFT JOIN productDiscounts pd 
  ON p.webcode = pd.product  
WHERE sd.user = 'Y127'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...