2016-03-16 2 views
1

Я понимаю, что здесь есть много сообщений MySQL, и каждый из них зависит от использования плакатов. У меня довольно сложная ситуация с объединением.Сложный оператор объединения MySQL

У меня есть 3 таблицы и я пытаюсь объединить данные по двум столбцам. Im группировка на ProductID и ProductionMonth.

Я почти там, но сейчас у меня есть точка привязки с группировкой столбца даты для моего набора данных.

В настоящее время мои данные не заполняют данные, где их нет в течение определенного месяца. И мне это нужно, по крайней мере, отображать нули и дату.

Сейчас выводится что-то вроде этого:

<pre> 
Products TOTAL CANCELLED Product Name ProductType  ProductionMonth 
    2  32   5  Advantage  VSC Auto  2016-02-02 
    2  26   3  Advantage  VSC Auto  2016-01-01 
    2  31   2  Advantage  VSC Auto  2015-12-01 
    16  5   1   ASC   VSC Auto   2016-02-01 
    16  4   4   ASC   VSC Auto   2016-01-01 
    17  0   0  MenuVantage Menu Software  NULL 
    21  12   0   CSO    Credit  2016-02-01 
    21  24   0   CSO    Credit  2016-01-01 
</pre> 

Но мне нужны данные также включают в себя дату, даже если там не дату, связанную с этой записью. Вот мой текущий код:

<pre> 
SELECT P.Products, Inv.TOTAL,Inv.CANCELLED, Pur.ProductName AS 'Product Name',ProductType,ProductionMonth 
FROM Dealership_Products P 
LEFT JOIN (SELECT ProductsID, SUM(Total) AS TOTAL, SUM(Cancelled) AS CANCELLED,ProductionMonth 
      FROM Monthly_Production_Numbers 
      WHERE DealershipID = '25' 
      AND 
      ProductionMonth > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) - INTERVAL 3 MONTH 
      GROUP BY ProductionMonth,ProductsID) AS Inv 
ON P.Products = Inv.ProductsID 
LEFT JOIN (SELECT ProductsID, ProductName AS ProductName, ProductType 
      FROM Products 
      GROUP BY ProductsID) AS Pur 
ON P.Products = Pur.ProductsID 
WHERE DealershipID = '25' 
AND 
Inactive = 'FALSE' 
ORDER BY Products ASC, ProductionMonth DESC 
</pre> 

Таблицы используются:

Dealership_Products 
    column (Products) ->  
Products.ProductsID 

Monthly_Production_Numbers группа по (ProductionMonth) "Последние 3 месяца" группа по (ProductsID)

Продукты

Из-за того, что данные и таблицы настолько сложны, я не могу разделить всю структуру. Но основные части здесь.

Благодарим за помощь!

+0

Как правило, проблемы с отображением данных лучше всего обрабатывать на уровне представления (например, петле PHP), если это доступно. – Strawberry

+0

Он доступен, но я знаю, что его можно получить полную гамму с некоторыми умными линиями MySQL. Было бы более эффективным, если бы перешел на маршрут MySQL. Благодарю. –

+0

Нет. Эффективности нет. – Strawberry

ответ

0

Как насчет использования IFNULL?

IFNULL(ProductionMonth,'date-you-want') as ProductionMonth 
+0

Не знаете, где вы предлагаете Я помещаю линию IFNULL, которую вы упомянули. Я предполагаю, что в строке SELECT. Пробовал и те же результаты. Благодаря! –

+0

Вам понадобится механизм генерации значения IFNULL (обратите внимание, что COALESCE() соответствует стандарту). Это может быть через UNION или таблицу служебных программ (например, таблицу всех возможных дат или таблицу целых чисел [0-9]) - что-то, что будет использоваться в качестве семени для генерации отсутствующих значений. Но я предпочитаю цикл в прикладном уровне. – Strawberry

+0

Есть ли у вас какие-либо примеры кода или предложения о том, как выполнить итерацию по моему приведенному выше примеру вывода и заполнить недостающие строки датами через некоторый вид прикладного уровня? –

Смежные вопросы