Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Объединение двух запросов с разделением данных по разным столбцам.
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Объединение двух запросов с разделением данных по разным столбцам.

Страниц (1): [1]
 

1. Greider - 26 Октября, 2017 - 17:29:30 - перейти к сообщению
Есть вот такой запрос к двум таблицам:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT label_id,label,COUNT(label) AS qnty_stock FROM stock GROUP BY label
  2. UNION
  3. SELECT label_id,label,COUNT(label) AS qnty_tranzit FROM tranzit WHERE sht="Stock" GROUP BY label


В данном виде запрос естественно выдает три столбца:

CODE (SQL):
скопировать код в буфер обмена
  1. label_id label    qnty_stock
  2. 123      MB-170   1          
  3. 342      MS-174   1          


А нужно четыре. Чтобы количества из каждого запроса были в своем столбце:

CODE (SQL):
скопировать код в буфер обмена
  1. label_id label    qnty_stock  qnty_tranzit
  2. 123      MB-170   1           0
  3. 342      MS-174   0           1



Я бы мог разделить по столбцам средствами PHP, но для этого надо знать, из какой таблицы пришел результат.
Пробовал использовать $meta = mysql_fetch_field($r, 0) и потом сделать условие по имени таблицы $meta->table, но он работает для каждого запроса по отдельности, а при использовании UNION не выдает ничего.

Какие еще есть выходы из ситуации?
2. Мелкий - 26 Октября, 2017 - 17:37:27 - перейти к сообщению
Так и сделайте 4 столбца. union'у всё равно что объединять, была бы только структура совместимая
И кстати union all, а не union.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT label_id,label,COUNT(label) AS qnty_stock, NULL AS qnty_tranzit FROM stock GROUP BY label
  2. UNION ALL
  3. SELECT label_id,label,NULL, COUNT(label) AS qnty_tranzit FROM tranzit WHERE sht="Stock" GROUP BY label


Можно и понимать от какого union какие данные приплыли:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT label_id,label,COUNT(label) AS qnty, 'stock' AS tablename FROM stock GROUP BY label
  2. UNION ALL
  3. SELECT label_id,label,COUNT(label) AS qnty, 'tranzit' AS tablename FROM tranzit WHERE sht="Stock" GROUP BY label

 

Powered by ExBB FM 1.0 RC1