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]   

> Без описания
pantela
Отправлено: 19 Июля, 2017 - 14:38:08
Post Id



Частый посетитель


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


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




Стоит задача из 3 массивов вывести список городов, какие заказы были у них и какое количество выполненных заказов.

Есть массив список городов:
PHP:
скопировать код в буфер обмена
  1. [country_types] => Array(
  2.   [0] => Array(
  3.     [id] => 1
  4.     [title] => Moscow
  5.   )
  6.   [1] => Array(
  7.     [id] => 2
  8.     [title] => Ukraina
  9.   )
  10.   [2] => Array(
  11.     [id] => 3
  12.     [title] => Japan
  13.   )
  14.   [3] => Array(
  15.     [id] => 4
  16.     [title] => China
  17.   )
  18.   [4] => Array(
  19.     [id] => 5
  20.     [title] => Spane
  21.   )
  22. )


Есть массив список заказов для городов:
PHP:
скопировать код в буфер обмена
  1. [orders_country] => Array(
  2.   [0] => Array(
  3.     [country_id] => 1
  4.   )
  5.   [1] => Array(
  6.     [country_id] => 2
  7.   )
  8.   [2] => Array(
  9.     [country_id] => 5
  10.   )
  11. )



Есть массив количество выполненных заказов:
PHP:
скопировать код в буфер обмена
  1. [records_orders] => Array(
  2.   [0] => Array(
  3.     [id] => 1
  4.     [record] => 21
  5.   )
  6.   [1] => Array(
  7.     [id] => 2
  8.     [record] => 19
  9.   )
  10.   [2] => Array(
  11.     [id] => 3
  12.     [record] => 7
  13.   )
  14.   [3] => Array(
  15.     [id] => 4
  16.     [record] => 0
  17.   )
  18.   [4] => Array(
  19.     [id] => 5
  20.     [record] => 11
  21.   )
  22. )



Надо вывести значения виде:
Заказы города, где: "country_types.id" = "orders_country.country_id"
Количество выполненных заказов, где: "records_orders.id" = "country_types.id" это навреное тоже самое что и "records_orders.id" = "orders_country.country_id", т.к. "country_types.id" всегда будет == "records_orders.id"

В итоге должно быть:
Moscow - есть (выполненно 21 заказов)
Ukraina - есть (выполненно 19 заказов)
Japan - не выполненно (но есть 7 заказов)
China - нету (заказов не найденно)
Spane - есть (выполненно 11 заказов)

спс.Ув.
 
 Top
pantela
Отправлено: 19 Июля, 2017 - 17:20:48
Post Id



Частый посетитель


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


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




Некоторые советую на стороне БД сделать JOIN, понимаю но мне надо именно так как я описал на PHP стороне всё это сделать... Огорчение
 
 Top
pantela
Отправлено: 20 Июля, 2017 - 14:10:24
Post Id



Частый посетитель


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


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




Объединил всё в один массив. по структуре получаеться

CODE (htmlphp):
скопировать код в буфер обмена
  1. Город{
  2.     Заказы{
  3.         Выполненые{
  4.             ...
  5.         }
  6.     }
  7. }


Теперь вопрос: В итоге у меня получаеться foreach в foreach надо крутить...? на сколько верно...? Однако
 
 Top
Мелкий Супермодератор
Отправлено: 20 Июля, 2017 - 14:25:25
Post Id



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


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


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




Если на базе джойнить нельзя - значит надо джойнить на приложении.
На выбор алгоритмы джойна двух наборов данных:
nested loops: вложенный цикл
hash join: сначала один набор данных пихаете в массив ключ объединения => значения, потом идёте по второму и isset'ом быстро и очевидно джойните
merge join: сортируете оба набора по критерию объединения, идёте параллельно по обоим массивам в одном цикле и склеиваете.

Джойн records_orders отлично в hash join подходит. Пересобираете массив вида (видимо) country_id => число заказов
foreach страны
isset($hash[ $country_id ]) => есть заказы в городе

Чем различаются выполненные и найденные заказы - по представленным данным не понял. Но всё равно алгоритмы те же самые.


-----
PostgreSQL DBA
 
 Top
MouseZver
Отправлено: 21 Июля, 2017 - 13:18:35
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Июнь 2017  
Откуда: php.ru


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




pantela пишет:
Теперь вопрос: В итоге у меня получаеться foreach в foreach надо крутить...?

найн Подмигивание один фор достаточен
(Добавление)
Мелкий пишет:
Если на базе джойнить нельзя - значит надо джойнить на приложении.

что за чушь Улыбка пхп приложение..... в бд джойнить религия не позволяет ?

LEFT JOIN
 
 Top
Мелкий Супермодератор
Отправлено: 21 Июля, 2017 - 13:35:17
Post Id



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


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


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




MouseZver пишет:
что за чушь пхп приложение..... в бд джойнить религия не позволяет ?

Как вы думаете, DBA сотни постгресовых машин не умеет джойнить?

И сюрприз - можно иметь php приложение и не иметь этих данных в базе. Например потому, что это результат внешнего api. Или потому что это разные базы и fdw не спасает. Или какое-нибудь тупое mongodb. Возможностей много.

Впрочем да, спрашивать почему именно переджойнить нельзя на субд мне просто не интересно. Будет или осмысленная причина или фейспалм.


-----
PostgreSQL DBA
 
 Top
MouseZver
Отправлено: 21 Июля, 2017 - 18:53:33
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Июнь 2017  
Откуда: php.ru


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




Мелкий пишет:
DBA сотни постгресовых

При чем тут такой вид баз данных, не подскажешь ? Или Мускуля уже не достаточно, для реализации такой нативной задумки ?

Вот вам и фейспалм.
(Добавление)
Мелкий пишет:
можно иметь php приложение и не иметь этих данных в базе.

В какую то степь заехал охотник поохотиться, а оказалось тут пустыня. Мы скрипты пишем, чтобы их в вебе результат смотреть выполнения, а не каким либо левым софтом.

(Отредактировано автором: 21 Июля, 2017 - 19:00:18)

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB