[inny]Jak połączyć dwie kolekcje po kluczu, Cos jak left join |
[inny]Jak połączyć dwie kolekcje po kluczu, Cos jak left join |
23.09.2018, 11:43:47
Post
#1
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Witam, Panowie mam dwie kolekcje, pierwsza to ilosc ktora zostala wyprodukowana (part_no, qty) danego panela:
Druga to taki ala plan: Problem polega na tym ze pochodzą z oddzielnych baz danych wiec nie moge tego polaczyc joinem. Co trzeba zrobic zeby uzyskac taki rezultat:
Powiem szczedrze ze wczoraj szukalem rozwiazania ze 3 godziny i nie udalo mi sie. Bede wdzięczny za pomoc. PS: Framework to Laravel 5.6 |
|
|
23.09.2018, 12:00:53
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
A kto Ci powiedzial ze nie mozesz zrobic joina z dwoch baz danych ? Jesli te dwie bazy sa z jednego polaczenia to mozesz to zrobic tak:
Ewentualnie jesli to jest z dwoch innych polaczen uzyj : https://dev.mysql.com/doc/refman/8.0/en/fed...age-engine.html Ale to wymaga nowszych wersji mysql. Ostatecznie mozesz pobrac dane przemapowac na tablice gdzie kluczem bedzie part_no i przeleciec w drugiej petli wycisgajac dane weflug klucza part_no zwracajac uwage na to aby bylo aktywne polaczenie do tej tabelki z part_no Ten post edytował rad11 23.09.2018, 12:38:47 |
|
|
23.09.2018, 12:14:47
Post
#3
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Sorki, nie napisałem chyba wszystkiego. Pierwsza baza to jest baza Oracle do której sie podpiąłem a druga to jest moja lokalna.
|
|
|
23.09.2018, 12:43:34
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
To raczej nie unikniesz trzeciej opcji.
|
|
|
23.09.2018, 12:45:53
Post
#5
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Wczesniej rozwiazałem ten problem ale połowicznie, bo po prostu zawartosc tej kolekcji zapisuje w lokalnej bazie danych i potem do niej juz łączę joinem. Działa ale za dlugo to trwa. Az ciężko uwierzyć ze nie ma innej opcji.
|
|
|
23.09.2018, 12:47:30
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Nie powinno to dlugo trwac pokaz jak to robiles i pokaz create tych tabelek
Ten post edytował rad11 23.09.2018, 12:49:09 |
|
|
23.09.2018, 13:09:42
Post
#7
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Problem polega na tym ze czasem paru userów chce sprawdzić w tym samym czasie to samo albo inny zakres dat wiec dlugo czekają.
Nie jestem teraz przy projekcie ale wyglada to mniej wiecej tak: User wybiera na przyklad date 2018-09-17. po tym nastepuje kasowanie tabeli lokalnej History, nastepnie zapytanie pobiera z bazy Oracle wszystkie rekordy dla okreslonej grupy produktow od tej daty wlacznie. To co zostalo pobrane insertem importowane jest do tabeli history i ostatnie zapytanie juz wyciaga liste produktów wszystkich a join łączy to po part_no. TO wszystko |
|
|
23.09.2018, 13:16:54
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Moim zdaniem nie tedy droga. Powiniennes zrobic skrypt ktory bedzie ta tabelke aktualizowal co jakis czas (cron), dodac odpowiednie indexy na kolumny itd.
Ten post edytował rad11 23.09.2018, 13:17:16 |
|
|
23.09.2018, 13:29:32
Post
#9
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Ok, zainteresowales mnie. Tylko prawdopodobnie to bedzie wygladalo tak ze musi tam byc historia nawet z przed roku. Nawet nie chce myslec ile tam bedzie rekordow.
|
|
|
23.09.2018, 13:33:10
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
To dowiedz sie ile bedzie tych rekordow i wtedy bedziesz sie martwic ale chyba w miliardach to nie bedzie. Ewentualnie jak bedzie bardzo bardzo duzo to spróbuj uzyc https://dev.mysql.com/doc/refman/5.7/en/par...ning-types.html
Oczywiscie piszac skypt mialem na mysli komende w Laravel itd. Ten post edytował rad11 23.09.2018, 13:38:38 |
|
|
23.09.2018, 14:42:37
Post
#11
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Ok sprawdzilem. To bedzie okolo 5 mln od poczatku roku :/ I stale rosnie
|
|
|
23.09.2018, 14:54:02
Post
#12
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Dla czego nie pobierzesz od razu kolekcji i jako klucz ustawisz part_no a potem po prostu 1 pętlą przelecisz po quantity nadając wartości
|
|
|
23.09.2018, 15:12:49
Post
#13
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Tu chyba wychodzą moje braki wiedzy bo nie wiem jak i jakos jak staralem sie wyszukac o tym informacje to nic mi nie wychodzilo, znalazlem tez w dokumentacji cos takiego:
Ale nie zadzialalo. Pomozesz? |
|
|
23.09.2018, 15:21:01
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Ale co Ty tymi dwoma zapytaniami probujesz uzyskac ? To sa te dwie tabelki o ktorych pisales ?
|
|
|
23.09.2018, 15:25:03
Post
#15
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Nie to jest przyklad z dokumentacji. Juz po prostu probowalem olac kolekcje i laczyc zapytania ale ostatecznie wolalbym sie skupic na polaczeniu kolekcji. W jakis sposob
|
|
|
23.09.2018, 15:38:47
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
To prosba abys nie dawal mi przykladow z dokumentacji tylko kod ktory piszesz ok?☺
|
|
|
23.09.2018, 15:48:40
Post
#17
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
Ok. Ale kodu tych kolekcji nie bede Ci dawal bo jak kolekcja wyglada to wiesz . Zainteresowal mnie ten post kolegi Pyton_000. Moze faktycznie istnieje jakis sposob zeby to zrobić kolekcjami.
Tu jest kod gdzie pobieram kolekcje. ifsCode to jest to samo co part_no: Kod $planDate = $request->planDate;
$imaPlan = collect(DB::connection('mysql')->select(" select ip.ifsCode, ip.description, ip.minStock, ip.maxStock, ip.demand, ip.finishedStock, ist.inStock ,ip.cover, (CASE WHEN ist.inStock is null then 0 else ist.inStock END) as currentStock, ip.autoPlan ,ip.totalAutoPlan, ith.qty from imaProdPlan ip left join imaTransactionHistory ith on ith.partNo = ip.ifsCode left join imaStock ist on ist.partNo = ip.ifsCode where left(ip.created_at,10) = '$planDate' ")); $ifsCodes = DB::connection('mysql')->select("SELECT distinct ifsCode from imaProdPlan"); foreach ($ifsCodes as $key) { $ifsCodestr[] = "'".$key->ifsCode . "'"; } $ifsCodestr = implode(", ", $ifsCodestr); //return dd($ifsCodestr); $th = collect(DB::connection('oracle')->select("select part_no, sum(quantity) as qty from ( select * from IFSAPP.INVENTORY_TRANSACTION_HIST2 where contract = 'B001' and part_no in ($ifsCodestr) and to_char(date_applied, 'yyyy-mm-dd') BETWEEN to_char(to_date('$planDate','yyyy-mm-dd')-1,'yyyy-mm-dd') and to_char(to_date('$planDate','yyyy-mm-dd')+6,'yyyy-mm-dd') and DIRECTION = '+' and TRANSACTION = 'Receipt into Inventory' and LOCATION_NO = 'IMAPROD1') group by part_no")); Ten post edytował fumfel20 23.09.2018, 15:52:25 |
|
|
23.09.2018, 15:50:41
Post
#18
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Istnieje nawet Ja Ci taka opcje podalem
|
|
|
23.09.2018, 15:55:54
Post
#19
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 17.09.2015 Ostrzeżenie: (0%) |
No tak, nie widzialem Twojego edytowanego postu. Wlasnie problem polega na tym ze nie wiem jak sie za to zabrac. Domyslam sie ze metida map z kolekcji. Wracam do dokumentacji i jeszcze raz sprawdze.
|
|
|
23.09.2018, 16:01:32
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Spróbuj tak:
Ten post edytował rad11 23.09.2018, 16:06:42 |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 13:00 |