Kurzorok tárolt eljárások mysql, mysql
Mivel kurzorok része egy tárolt eljárást, ebben a cikkben már részletesen tárgyalja a HP. Különösen hogyan kivonat a HP adathalmaz.
Mi az a mutató?
A kurzor nem lehet használni a MySQL is. Fontos eleme a tárolt eljárásokat. Szeretném összehasonlítani a kurzort a „pointer” C / C + + vagy bejáró foreach a PHP-operátor.
Használja a kurzort, akkor menjen át az adathalmazt, és dolgozza fel az egyes rekord összhangban meghatározott célkitűzéseket.
Egy ilyen művelet a rögzítési eljárás is végezhető PHP-szinten, amely jelentősen csökkenti a továbbított adatmennyiség a PHP-szintű adatok, akkor egyszerűen vissza a kezelt szintézis / statisztikai eredmény vissza (ezáltal kiküszöbölve feldolgozása válassza - foreach kliens oldal) .
Mivel a kurzor végre egy tárolt eljárást, ez minden előnyével (és hibák) inherens CP (beléptető, pre-összeállítás, a nehéz hibakeresés, stb)
Példa a gyakorlati alkalmazás
Az én személyes oldal egy oldal az eredmények játékkal kedvenc NBA csapatok: a Lakers.
A táblázat szerkezete ez az oldal nagyon egyszerű:
1. ábra szerkezete az eredmény tábla Lakers játékok
(I MySQL Workbench az akkor használjon másik eszközt választott, mint a GUI-eszköz kezelésére a MySQL adatbázis.).
Ez természetesen nem egy lehetetlen feladat, de ha a feltételek bonyolult, és az adatokat táblázat lesz sokkal, akkor hosszabb ideig tart, és a hibák esélye növekszik is.
Elérjük, hogy a PHP? Igen, természetesen. Tudjuk, hogy az adatokat a játékok (konkrétan winlos oszlop) ebben a szezonban, és végig rekordokat időtartamának kiszámításánál folyamatos sorozat győzelem / vereség a sorban.
De nem, hogy, mi lesz, hogy fedezze az összes adatot az adott évben, és a legtöbb adat használhatatlan lesz számunkra (nem túl valószínű, hogy néhány csapat lesz egy sor hosszabb, mint 20 + játékok egy sort az alapszakaszban, amely 82 mérkőzést ).
Azonban nem tudjuk biztosan, hogy hány nyilvántartást kell távolítani a PHP határozza meg a sorozatot. Tehát nem nélkülözheti hiábavaló kitermelése szükségtelen adatokat. És végül, ha a jelenlegi több győzelem / vereség egymás után az egyetlen dolog, amit szeretnénk tudni a táblázatból, akkor miért kell a kivonat az összes adat vonal?
Meg tudjuk csinálni egy másik utat? Igen, ez lehetséges. Például, mi is létrehozhatunk egy biztonsági asztal, kifejezetten tárolására az aktuális érték a győzelmek száma / vereségek egy sorban.
A túl minden új rekord automatikusan frissíti, és ezt a táblázatot. De ez túl körülményes és hibára hajlamos módszer.
Tehát hogyan tudjuk jobbá tenni?
A kurzort a tárolt eljárás
Ahogy azt sejteni lehet a neve a jelenlegi cikket, a legjobb alternatíva (véleményem szerint), hogy megoldja ezt a problémát, hogy használja a kurzort egy tárolt eljárás.
Hozzunk létre a MySQL Workbench első HP:
Ebben a HP, van egy bemeneti paramétere és két kimenő. Ez határozza meg az aláírás HP.
A szervezetben HP azt is bejelentette, több helyi változók sorozata eredmények (nyeremény vagy veszteség, current_win), az aktuális sorozat és az aktuális állapotát a győzelem / veszíteni bizonyos játékot:
Bár nem látszik tisztán, de el tudjuk képzelni, hogy ez a adatsor tartalmaz egy sorozat «L» értéket és a «W». Az adatok alapján a 2. ábrán látható, ez a következőnek kell lennie: «LLLLLLWLL. „(6«L»értékek 1«W», stb)
Kiszámításához győzelmek száma / vereségek egy sorban, akkor kezdjük a múlt (és először a fenti adatok) mérkőzés. Ha a kurzor nyitva van, mindig kezdődik az első bejegyzés a megfelelő adatbázisba.
Ha az adatokat le először, a kurzor a következő rekordra. Így a kurzor a viselkedés hasonló az összes, fogás egy sor rendszer adat FIFO (First In First Out). Pontosan ez az, amire szükségünk van.
Miután a győzelem / vereség, így a jelenlegi állapot és az egymást követő azonos elemeket a készlet, akkor is kezelni a ciklus (hajtogat) a fennmaradó adathalmaz. Minden iterációban a kurzor „ugrik” a következő rekordra, amíg bontunk ciklusban, vagy amíg az összes bejegyzést nem kell számolni.
Ha az állapot a következő bejegyzés megegyezik a jelenleg hatályos győzelme / veszteség, ami azt jelenti, hogy a sorozat folytatódik, akkor növeljük az egymást követő győzelem (vagy sérülés) 1, és továbbra is rendezni az adatokat.
Ha az állapot más, ez azt jelenti, hogy a sorozat megszakad, és meg tudjuk állítani a ciklust. Végül lezárjuk a kurzort, és hagyja az eredeti adatokat. Ezt követően, az eredmény megjelenik.
Továbbá, lehet növelni a HP Access Control, ahogy az előző cikkben.
A teszt a tárolt eljárást, tudunk írni egy rövid PHP-script:
A feldolgozás eredményeként meg kell jelennie körülbelül az alábbiak szerint:
A kimeneti adatállomány a tárolt eljárás
Többször során ezt a cikket, a beszélgetés fordult hogyan kell megjeleníteni az adathalmaz a HP, amely egy adathalmaz feldolgozására eredmények több, egymást követő hívások más HP.
A felhasználó kíván szerezni használatával korábban megállapított kapcsolattartási HP több információt, mint egy folyamatos sorozat győzelem / veszteség az év; például mi is létrehozhatunk egy táblázatot, amely megjelenik egy sor győzelmek / vereségek az évek során:
(Elvileg a több információ áll majd időtartamát a leghosszabb sorozat győzelmek vagy vereségek egy adott szezonban. A probléma megoldásához, akkor könnyen bővíteni le a HP, úgyhogy hagyjuk ezt a feladatot azok az olvasók, akik érdekeltek lennének. Ennek keretében a jelenlegi cikkben, akkor a feldolgozás folytatása a jelenlegi egy sor győzelmek / vereségek).
MySQL tárolt eljárások vissza csak skaláris érték (integer, string, stb.), Ellentétben válasszuk szereplők. re. (Az eredményeket a alakítjuk egy adathalmaz). A probléma az, hogy az asztal, hogy azt akarjuk, hogy eredményt a jelenlegi struktúrát az adatbázis nem létezik, hogy készül az eredmények feldolgozását a tárolt eljárás.
A probléma megoldására van szükség egy ideiglenes táblát, vagy ha lehetséges és szükséges, asztalt foglalni. Lássuk, hogyan tudjuk megoldani a jelenlegi problémát segítségével egy ideiglenes táblát.
Először fogunk létrehozni a második CP, a kód az alábbiakban mutatjuk be:
Számos érdemi észrevételeit a fenti kódot:
- Mi határozza meg a legkorábbi és legkésőbbi év a minta lakers asztal;
- Készítünk egy ideiglenes tábla tárolására kimenő adatokat a szükséges szerkezet (évszak, széria, nyer);
- A hurok, először végezze el a korábban létrehozott CP a szükséges paramétereket (hívás széria (cur_year, @l, @s)), akkor fogd a visszaküldött adatok, és helyezze őket egy ideiglenes táblát (beilleszteni yearly_streak értékek (cur_year, @l, @s) ;);
- Végül válassza ki az ideiglenes táblát, és visszatér egy adathalmazt, majd néhány beállítást (DROP ideiglenes tábla ha létezik yearly_streak;).
Ahhoz, hogy eredményeket hozunk létre, egy másik kis PHP-script kód, amely az alábbi:
Az eredmény megjelenítésére így néz ki:
Felhívjuk figyelmét, hogy a fentebb vázolt módszer némileg eltér az első hívást a HP.
Az első HP nem tér vissza egy adathalmaz - csak két paraméter. Ebben az esetben használjuk OEM exec. majd a lekérdezés adatok kiadását; A második HP, mi származik keresztül egy sor adatot, így használjuk OEM lekérdezés közvetlenül a hívás HP.
Voila! Megcsináltuk!
következtetés
MySQL az oldalon megtalálja a hivatalos dokumentációt a szintaxis a tárolt eljárás és a különböző szereplők számára. Az anyagok létrehozásához tárolt eljárást, akkor láthatjuk, hogy a dokumentumban. és még több információt, hogy jobban megértsük a téma itt található.
Fordítása a cikk «Kurzorok MySQL-ben tárolt eljárások» készítettünk egy csapat barátságos Web design projekt tól Z-ig