Hogyan lehet ezt? MySql, sorszámozás kategóriákon belül
példatábla: (kat, és posInKat a lényeg)
id, nev, kat, posInKat
1, Asd, 1, 1
2, afg, 1, 2
3, ghjd, 2, 1
4, agg, 1, 3
5, rgd, 1, 4
6, klk, 2, 2
Hogyan lehet ütközésmentesen insertelni a pozíciót(posInKat) kategórián(kat) belül?
Ha insert előtt lekérdezem hogy hányas az aktuális pozicio a kategórián belül, akkor a lekérdezés és beírás között eltelik egy idő, ha valami egyszerre írna be, lehetséges a duplikáció (megkaphatja ugyanazt a sorszámot)
Van egyszerűbb megoldás, vagy a begin commit-tal csináljam(ezzel ki van védve?) ?
Vagy valahogy máshogy kéne az egészet? Fórum(szerűt:) csinálok, egy kat-ban kéne megszámozni a postokat (a válaszolás miatt (meg hogy #1 után ne #399 jöjjön:D))
Gyanús, hogy nálad valami tervezési hiba lesz itt a dologban.
Amúgy egy lehetséges eset, hogy egyedire állítod a posInKat mezőt és az insertnél csekkolod, hogy hibával tér-e vissza.
Ha nincs hiba, akkor nincs ütközés, ha hiba van, akkor már szerepel az adott érték a táblában.
Esetleg így is lehet:
Ugye le tudod kérdezni az adott kategória legnagyobb sorszámat:
SELECT max(posInKat) FROM forum AS f GROUP BY f.kat HAVING f.kat=$kat
($kat helyére természetesen a kategória azonosítója kerül.)
Ehhez hozzá tudsz adni egyet, és az egészet egyetlen SQL utasításba tenni:
INSERT INTO forum(nev,kat,posInKat) VALUES($nev,$kat,1+(SELECT max(posInKat) FROM forum AS f GROUP BY f.kat HAVING f.kat=$kat))
Ez egyetlen SQL utasítás, és ha minden igaz, akkor egyben fogja feldolgozni a rendszer, így nem jöhetnek közbe más SQL utasítások.
óó, tényleg :D még nem sql-eztem eleget hogy ilyen eszembe jusson :D (pedig már csináltam insert selectet)
köszi!
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!