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ű:

Kurzorok tárolt eljárások mysql, mysql

1. ábra szerkezete az eredmény tábla Lakers játékok

Kurzorok tárolt eljárások mysql, mysql

(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:

Kurzorok tárolt eljárások mysql, mysql

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:

  1. Mi határozza meg a legkorábbi és legkésőbbi év a minta lakers asztal;
  2. Készítünk egy ideiglenes tábla tárolására kimenő adatokat a szükséges szerkezet (évszak, széria, nyer);
  3. 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) ;);
  4. 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:

Kurzorok tárolt eljárások mysql, mysql

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




Kapcsolódó cikkek