Sziasztok.
Nem vagyok egy adatbázis guru (és nem is szakmám, csak rám lett oszvta, hogy oldd meg), de egy problémát szeretnék elegánsabban megoldani mint most. Adott egy tömb egy oszlopa, ami tartalmazza azt, hogy hány panasz érkezett egy temékre. Ezen szám lépetését úgy oldottam meg, hogy select-el lekérdezem hozáadok/levonok 1-eet majd update. Van erre slegánsabb megoldás? Mint C-ben pl az valtozo++, valtozo--?
- 2285 megtekintés
Hozzászólások
erre gondolsz?
update tabla set mezo = mezo + 1 where termek_azon = valami
vagy
update tabla set mezo = (select count(*) from panasz_tabla where termek_azon = valami) where termek_azon = valami
- A hozzászóláshoz be kell jelentkezni
Ilyet lehet? Akkor ez lesz. Köszi. Kb 8-gépelt oldal az SQL-tudásom. Annyira nem félek az üközések, egyszerre több dolgok.....-tól, mert minden feladatra 1-ember lesz. 1 feladatra csak 1 ember léphet be......., ráadásul ezek egymásra épülnek. Tehát amig a nincs kész addig b nem is látja. Megolva. Megy.
------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.
- A hozzászóláshoz be kell jelentkezni
Sőt, ez nem is jó megoldás. Ha konkurens írás van, akkor 1 panasz elveszhet.
- A hozzászóláshoz be kell jelentkezni
Javaslom a tranzakciókkal és triggekkel való megismerkedés. :)
- A hozzászóláshoz be kell jelentkezni
www.postgresql.org/docs/9.0/static/functions-sequence.html
sequence es hozza trigger, igy kb azt tudja mint az autoincrement mysql alatt
- A hozzászóláshoz be kell jelentkezni
Véleményem szerint a sequence nem jó, mert a tranzakció rollback-ek hatására lyukas sorozatokat generálnak. Ezzel biztosítja a postgres azt hogy nem oszt ki egyszerre két ugyanolyan id-t és közben gyorsan is tud működni.
Ha Read Commited az izolációs szint akkor a legjobb az update set valami = valami + 1 where id = 10, pl.
Ha nem nyúltál hozzá akkor a default a Read Commited lesz.
- A hozzászóláshoz be kell jelentkezni
Ha ertelmes tranzakcio kezeles van, akkor meg jo is, hogy nincs 2x kiosztva az ID, mert uj bevitelnel ugyis a komplett tranyo megy a kukaba, cascade frissitesekkel egyutt. Kerdes, mire kell a szamlalo maga.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Maga a számláló jó, mivel gyors, szerveroldali (nextval, currval, nincs a szekvencia lekéréssel járó round trip, azaz az alkalmazás lekéri az aktuális értéket és beilleszti az update-be vagy insertbe).
A feladat ha minden igaz megköveteli hogy ne legyen lyukas a sorozat nem?
- A hozzászóláshoz be kell jelentkezni
ha jól értem, akkor itt nem ID-t akar adni a topicindító, hanem számolni, hogy mennyi egy érték.
szóval van egy tábla, amit tartalmaz valami ID-t ez lehet seq. hozzá van rendelve egy típus jelölés, meg egyéb sallangok.
ő eddig egy másik táblában (tömb)-ben rögzíthette, vhogy így típus, darab és itt akarta a darab-ot növelni.
na mármost én inkább egy view-t hoznék létre, ami tartalmazza hibajegyeket darabszámmal típus szerint csoportosítva.
create view viewnev as select tipus, count(tipus) from tablanev group by tipus
aztán ezt lehet finomítani, tetszés szerint. lehet rulet irni, hogy az eredeti tablabol ne lehessen torolni, masik mezovel jelolni hogy mi a pill. állapota (befejezett, nyitott, storno, ...) és ezeket is megszámlálni, feltüntetni a view-ban. és így elég mindössze egy insert és mégis frissül a statisztika, nem kell trigger meg semmi flinc-flanc.
- A hozzászóláshoz be kell jelentkezni
De ez alapon akár "egy select count(*) from tábla" select is jó.
- A hozzászóláshoz be kell jelentkezni