Vícenásobný insert – foreach cyklus

ForestCZE
Člen | 209
+
0
-

Zdravím, mám metodu:

private function addRecords(array $records)
    {
        $data = [];
        foreach ($records as $record)
        {
            $data["country"] = $record->COUNTRY;
            $data["destination"] = $record->DESTINATION;
            $data["name"] = $record->NAME;
            $data["accommodation"] = $record->ACCOMMODATION;
            $data["category"] = $record->CATEGORY;
            $data["latitude"] = $record->MAP["LATITUDE"];
            $data["longitude"] = $record->MAP["LONGITUDE"];
            $data["description"] = $record->DESCRIPTION;
            $this->database->getHotels()->insert($data);
        }
    }

Potřeboval bych poradit, jak poskládat vícenásobný insert, abych mohl poslat pouze jeden insert. Nevím, jak to v tom foreachi udělat. Pomohl by mi někdo, prosím? Děkuji.

nightfish
Člen | 468
+
+2
-

Používáš Database Explorer? Pokud ano, tak uložit do pole a zavolat nad ním insert().

private function addRecords(array $records)
    {
        $rows = [];

        foreach ($records as $record)
        {
            $data = [];
            $data["country"] = $record->COUNTRY;
            $data["destination"] = $record->DESTINATION;
            $data["name"] = $record->NAME;
            $data["accommodation"] = $record->ACCOMMODATION;
            $data["category"] = $record->CATEGORY;
            $data["latitude"] = $record->MAP["LATITUDE"];
            $data["longitude"] = $record->MAP["LONGITUDE"];
            $data["description"] = $record->DESCRIPTION;
            $rows[] = $data;
        }

        $this->database->getHotels()->insert($rows);
    }

Samozřejmě záleží na tom, kolik máš celkem záznamů. Pokud by jich bylo více než tisíc, tak bych nedělal jeden obrovský insert(), nýbrž bych data rozdělil na dávky po tisíci záznamech.

ForestCZE
Člen | 209
+
0
-

@nightfish Skript jako takový funguje :) Ale jak píšeš s tím počtem záznamů. Mám asi 1 133 záznamů. Původně jsme odesílal, co záznam, to insert, tak jsem si myslel, že by mi pomohlo, kdyby se to odeslalo v jednom insertu. Insertne se mi 221 záznamů a pak se to přeruší, protože Maximum execution time of 30 seconds exceeded, což mi dělalo i předtím. Jak tohle vyřešit?

EDIT: Tak insertem to není. Právě jsem zjistil, že to zastaví parsování.

Editoval ForestCZE (19. 7. 2019 17:48)