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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Объединение двух запросов с разделением данных по разным столбцам.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Greider
Отправлено: 26 Октября, 2017 - 17:29:30
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




Есть вот такой запрос к двум таблицам:

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 не выдает ничего.

Какие еще есть выходы из ситуации?

(Отредактировано автором: 26 Октября, 2017 - 17:29:49)

 
 Top
Мелкий Супермодератор
Отправлено: 26 Октября, 2017 - 17:37:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Так и сделайте 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


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB