Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
| Autor | Správa |
|---|
Registrovaný: 20.03.07 Prihlásený: 21.03.07 Príspevky: 4 Témy: 1 | 1 |
Nechcem veľmi otravovať, ale potreboval by som radu.
Mám droblém s úpravom záznamov v databáze.Potrebujem hromadne meniť približne 500 záznamov, no ak použijem príkaz update s podmienkou v cykle tak mi trvá takýto update aj niekoľko sekund.Keď som to skúsil na 1000 a viac záznamov dokonca niekoľko minút.
Nemohol by mi niekto poradiť ako sa to správne má robiť. Som len amatér samouk a neviem kde je chyba. Určite mám čosi zle ale neviem presne čo či je to webhostingom, scriptom, alebo štruktúrou databázy.
Dík
|
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
Podľa toho ako meníš záznamy... Niekedy sa cyklom jednoducho nevyhneš, avšak v niektorých prípadoch ide len o správne nastavenie podmienky v query. Hoď sem ukážku toho pôvodného zdrojáku, alebo popíš čo chceš ako podľa akých kritérii meniť...
|
|
Registrovaný: 20.03.07 Prihlásený: 21.03.07 Príspevky: 4 Témy: 1 | 1 |
Tu mám konkrétny výpis kódu.
pripoj();
$i=1;
$result=mysql_query("select * from st_import order by idcl ");
while ($row=mysql_fetch_assoc($result)) {
$new_id=$row['id'];
$new_nazov=$row['Nazov'];
$new_pocet=$row['pocet'];
$new_krajina=$row['krajina'];
$dotaz="update st_clanky ";
$dotaz.="SET id='".$new_id."',visible='0',";
$dotaz.="nazov='".$new_nazov."',pocet='".$new_pocet."'";
$dotaz.="obr_t='".$new_id.".jpg'";
$dotaz.=" WHERE krajina='".$new_krajina."' ";
$error=mysql_query($dotaz); // update clanky
echo $i."/".$dotaz."<br>"; // toto mam len na sledovanie vypisu
$i++;
}
"idcl"- mam indexované (id clanku)
Potrebujem zmeniť všetky záznamy v tabuľke st_clanky podľa kritéria krajina=new_krajina, ktoré som si vytiahol z tabuľky st_import.Do tabuľky st_import robím import z txt súboru ten súbor ma cca 3MB a tiež kvôli nedostatočnej rýchlosti som nechcel aby sa menili záznami v hlavnej tabuľke st_clanky, preto som si vytvoril st_import a naivne som si myslel že databáza mi ten problém porieši, ale problém je práve v tom príkaze UPDATE a už ma nič nenapadá ako by som to mohol riešiť inak.
Preto otravujem ľudí.
Vopred vďaka za radu.
|
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
Neviem, iné riešenie ma nenapadá ak do každého riadku tabuľky potrebuješ dať iné dáta... Hromadne to ide len cyklom. ako často to potrebuješ robiť? Každý deň, hodinu,...?
|
|
Registrovaný: 20.03.07 Prihlásený: 21.03.07 Príspevky: 4 Témy: 1 | 1 |
V tom je ten problém že potrebujem riešenie, ktoré by sa dalo používať častejšie lebo záznamov mi tam pribúda a čím ďalej tak tým dlhšie to bude trvať. A určite to musí dajako isť lebo inak by mnohé databázy boli nepoužiteľné. Ibaže ja neviem kde je problém. Ono v cykle problém nieje, pretože ak vynechám zápis do databázy zbehne to za okamih. Ale ak už dám meniť záznamy v databáze 4 hodiny nerobí nič iné. Dokonca som nechal upraviť len 100 záznamov(100 cyklov) a aj tak to trvalo cca 30 sekúnd.
|
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
Databázam sa nevenujem dostatočne dlho nato, aby som ti vedel rozumne poradiť, som v tomto smere tiež amatér. Otázkou je prečo potrebuješ tak často meniť toľko záznamov a len keď to dobre chápem prelievať dáta z jednej do druhej? Nejaké stávky, alebo o čo sa jedná? Je to dobre navrhnuté od základov, netreba ísť na to iným smerom?
|
|
Registrovaný: 20.03.07 Prihlásený: 21.03.07 Príspevky: 4 Témy: 1 | 1 |
Neviem či je to dobre navrhnuté, a ani neviem či náhod nieje chyba v obmedzeniach webhostingu.
Ťažko povedať, ďakujem ti aspoň za ochotu pomôcť.
|
|
Registrovaný: 03.05.07 Prihlásený: 03.05.07 Príspevky: 1 Témy: 0 | 0 |
1) idexovanie spomaluje zapis a to o dost, pokial to potrebujes updatenut viac krat za den zrus ten index
2) SELECT ALL (*) je velmi nestastny zapis, vzdy je lepsie vsetko vypisal aj kedby ta to malo stat o 30 min viac casu SELCET id, Nazov, pocet, krajina FROM st_import ORDER by idcl
|
|
Registrovaný: 08.06.07 Prihlásený: 10.06.07 Príspevky: 2 Témy: 0 | 0 |
UPDATE st_clanky SET
st_clanky.id = st_import.id,
visible = 0,
st_clanky.nazov = st_import.nazov,
st_clanky.pocet = st_import.pocet,
st_clanky.obr_t = cast(st_import.id as nvarchar(10)) + '.jpg'
FROM st_import
WHERE st_clanky.krajina = st_import.krajina
enjoy!
|
|
Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
|