Kezdőoldal » Számítástechnika » Programozás » Hogyan írható php-ban több...

Vid82 kérdése:

Hogyan írható php-ban több MySQL lekérdezés feltételekkel egy lekérdezésbe?

Figyelt kérdés

Sikerült írnom egy tárolt eljárást MySQL-ben de sajnos a tárhelyszolgáltató nem engedélyezi a tárolt eljárások futtatását.

Script:


DELIMITER $$

DROP PROCEDURE IF EXISTS `pic_update`$$

CREATE PROCEDURE `pic_update`

(

IN picUrlIn VARCHAR(25),

IN picMsgIn VARCHAR(140),

OUT oldPicUrlOut VARCHAR(25)

)


BEGIN

DECLARE countedRows INT(1);

DECLARE oldestId INT(1);

SELECT COUNT(*) AS `id` FROM `userspic` INTO countedRows;

SELECT id FROM `userspic` ORDER By `picdate` ASC LIMIT 1 INTO oldestId;

SELECT picurl FROM `userspic` ORDER By `picdate` ASC LIMIT 1 INTO oldPicUrlOut;

IF countedrows > 4 THEN

UPDATE userspic SET picurl=picUrlIn, picmsg=picMsgIn, picdate=CURRENT_TIMESTAMP WHERE id=oldestId;

SELECT oldPicUrlOut;

ELSE

INSERT INTO userspic (picurl, picmsg, picdate) VALUES (picUrlIn, picMsgIn, CURRENT_TIMESTAMP);

END IF;

END $$


Ezt szeretném átírni php lekérdezésekkel úgy, hogy egyszerre fusson le. Jól sejtem, hogy ehhez a mysqli_multi_query-t kellene használnom?



#php #MySQL #mysqli_multi_query
2014. nov. 2. 19:09
 1/7 anonim ***** válasza:
Ugyanezt egy laza csuklómozdulattal átírhatnád PHP-ra is.
2014. nov. 2. 19:11
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
Nagy vonalakban a lényeg az lenne, hogy van egy userspic táblám és oda viszem fel a feltöltött képek url-jét és dátumát. Ha a táblában felvitt sorok száma elérik az 5-öt, akkor ne írja a táblához hozzá 6.-nak, hanem a legrégebbi rekordot kikeresve írja felül azt és adja vissza a felülírás előtti "régi" url nevet, hogy azt tudjam törölni a szerverről. Szóval ez így működik, de hogyan tudnám ezt php lekérdezéssekkel megvalósítani. Ugyanis attól félek hogyha egyesével csinálom, azaz lekérem a sorok számát, majd ott csinálok egy feltételt majd a feltétel alapján újabb lekérdezést hajtok végre, akkor a két lekérdezés közt le tudják futtani ismét és akkor hasmi értéket kapok pl. a sorok számával kapcsolatosan. Nem tudom hogy érthető e. :)
2014. nov. 2. 19:15
 3/7 anonim ***** válasza:
100%
Az első 2 select-et olvastam el. UNION-al összekapcsolod őket, máris egy lekérdezés, és feldolgozhatod PHP-ban: 1 oszlop, 2 sor, és tudod melyik micsoda.
2014. nov. 2. 19:15
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

Ha félsz attól, hogy valami közbeszól két utasítás között, akkor használj transactionöket.

[link]


Egyébként ezek egy szempillantás alatt lefutnak.

2014. nov. 2. 19:20
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:
Biztos, hogy a scriptet lehet még egyszerűsíteni. Megnézem az írt lehetőségeket.
2014. nov. 2. 19:23
 6/7 A kérdező kommentje:

Lehet, hogy ez a tranzakciók használta sem ad nekem megfelelő megoldást. Tudom, hogy ezek a lekérdezések pillanatok alatt végrehajtódnak, de kérdésem az hogy elméletileg lehetséges e olyan szituáció, hogyha ezt a tranzakciót használom akkor nem konzisztens lesz az egész eljárásom?

Ugyanis:


Mondjuk nyitok egy kapcsolatot (kapcsolat1):

1 - Lekérem a tábla sorainak számát. (Erre épül az egész feltétel) Legyen mondjuk: 3

2 - Ha a tábla sorainak száma 3 > 5 IGAZ akkor UTASÍTÁS1 azaz UPDATE ha HAMIS UTASÍTÁS2 azaz INSERT.


De mi van akkor ha közben nyitok egy másik kapcsolatot is (kapcsolat2) és ugyan úgy lekéri mielőtt a kapcsolat1 lefutna teljesen:

1 - Lekérem a tábla sorait és itt is 3-at fog mutatni...



Ezt szerintem a tranzakciók használatával sem kerülhetem ki vagy igen? Vagy esetleg megvárja míg a kapcsolat1 lefut? Vagy hogy működik ez a mysql-nél?

2014. nov. 2. 20:31
 7/7 A kérdező kommentje:
Mégis csak a MySQL tranzakció a megoldás. Izolációs szintet pedig REPEATABLE READ-re állítottam.
2014. nov. 5. 12:54

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!