Autor | Zpráva | ||
---|---|---|---|
Spouter Profil * |
#1 · Zasláno: 15. 8. 2015, 13:53:10
Zdravím,
mám na webu naprogramovaný vlastní vyhledávač a nyní pro něj generuji klíčová slova do databáze. Vše dělám pomocí multi_query. Z databáze si nejdříve načtu po jednom řádku - název produktu, ean, atd... Z toho si vytvořím klíčová slova, která ukládám do jednoho hromadného sql dotazu a poté vygenerovaná klíčová slova z daného řádku hromadně uložím. Následně se generují opět klíčová slova z dalšího řádku, ale ještě se kontroluje, zda dané klíčové slovo už se v databázi nenachází. Pokud ano, uvede se pouze index. Dotaz je tedy takový, lze nějakou cestou zajistit, aby vždy multi_query počkalo s dalším hromadným insertem než je kompletně naimportován ten předešlý? Řešil jsem to tak, že jsem prostě v dané části skript na pevnou dobu uspal pomocí usleep(). To však není 100% spolehlivé. Lze to nějak vyřešit? |
||
Keeehi Profil |
#2 · Zasláno: 15. 8. 2015, 14:10:15
Spouter:
Kód by byl? |
||
Spouter Profil * |
#3 · Zasláno: 15. 8. 2015, 14:42:58
Keeehi:
Celý kód je dlouhý nejspíše by se v něm nikdo nevyznal bez znalosti databáze - uvedu jen ukázku: Postupně se vše ukládá do sql dotazu: $sqlv .= "INSERT INTO... ;"; $sqlv .= "INSERT INTO... ;"; $sqlv .= "INSERT INTO... ;"; atd... Následně se na konci vše pošle do databáze: $conn = new mysqli($servername, $username, $password, $dbname); mysqli_query($conn,"SET CHARACTER SET utf8 "); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $resultv = $conn->multi_query($sqlv); if ($resultv === TRUE) {} else { echo "Error: " . $sqlv . "<br>" . $conn->error;} $sqlv = ""; /* Zde se sql dotaz vymaže pro další iteraci $conn->close(); usleep(200000); /* Zde je skript uspán aby se stihly provést všechny inserty Vše se opakuje neustále dokola - počet insertů v jednom dotazu je cca 5-20 |
||
Keeehi Profil |
Spouter:
Myslím že takto: if ($resultv === TRUE) {while ($mysqli->more_result() && $mysqli->next_result());} else { echo "Error: " . $sqlv . "<br>" . $conn->error;} |
||
Spouter Profil * |
#5 · Zasláno: 15. 8. 2015, 16:01:53
Keeehi:
Děkuji - vypadá, že to funguje. Jen to ještě vyhazovalo varování. Upravil jsem to tedy do této podoby: if ($resultv === TRUE) { do{} while(mysqli_more_results($conn) && mysqli_next_result($conn)); } else { echo "Error: " . $sqlv . "<br>" . $conn->error;} Zatím jsem to stihl otestovat na 10 000 iteracích a vypadá, že se vše insertuje postupně, tak jak by mělo. Nikde mi to nepřeskočilo řádek. Ještě jednou díky za pomoc. |
||
Keeehi Profil |
#6 · Zasláno: 15. 8. 2015, 16:41:43
Jasné, takto to dává smysl. Upraveno.
|
||
Časová prodleva: 10 let
|
0