Hirdetés
Új hozzászólás Aktív témák
-
Magnat
veterán
válasz
shipfolt
#6014
üzenetére
Pl valamilyen sql-t, de ezt mondjuk a topik címe determinálja
Nem tudom mennyi bejegyzés van, de pár millió rekordot jó szervezés meg kulcsolás esetén kb bármilyen vason meg lehet oldani bármilyen sql szerverrel .. meg persze kell hozzá vmi frontend, jellemzően browseres megoldás a legelterjedtebb (ekkor persze kell webszerver, de az is van ingyé), de még excelben is meg lehet csinálni (ami a háttérben beszélget az sql szerverrel).Lehet pl MariaDB (azaz MySql), Transact (MS) Sql-nek is van ingyenes verziója olyan limitációkkal amit jó eséllyel nem fogtok elérni, meg még jó hosszan lehetne sorolni.
-
-
Magnat
veterán
válasz
kw3v865
#5975
üzenetére
Szia,
nem ismerem a PostgreSQL-t, de igent tippelnék, sőt, mivel az insert elvileg row exclusive lockol (tehát nem a teljes táblát) az is lehet, h a rekordok fele már be lesz szúrva amikor a fv lefut, a többi meg még nem ...
BEGIN;
TRUNCATE TABLE tábla;
LOCK TABLE tábla IN EXCLUSIVE MODE;
INSERT INTO tábla SELECT * FROM másik_tábla WHERE feltétel;
COMMIT;Én vhogy így csinálnám, nyilván ha a fv éppen akkor fut rá amikor ez történik, akkor egy picit várni fog. (Már ha fontos, h üres táblára vagy az insert közepén ne fusson le)
Illetve a truncate elvileg gyorsabb mint a delete, szóval amiatt is így használnám.
-
Magnat
veterán
válasz
shipfolt
#5962
üzenetére
Szia,
"De, amikor be kell allitani, akkor valahogy ra kell keresni minimum az "ID + megnevezes" mezokre, es nem latok arra lehetoseget, hogy ugyanabban a tablaban keressek, aminek az egyik rekordjat megnyitottam szerkesztesre." - no offense, de ez nem igazán sql kérdés, ez már annak az eszköznek a funkcionalitásának a függvénye, amiben a megoldást fejleszted. Sql kliens-szerver kontextusban egyébként sincs olyan, h valamit megnyitottál szerkesztésre, mármint létezik rekord és tábla lock is összetett tranzakcióknál, de ez amit leírtál a valóságban sztem tipikusan úgy néz ki, h kiadsz egy selectet bizonyos filterrel, amivel listázod a feladatokat, aztán amikor az egyiknek ki akarod jelölni a szülőjét, akkor adott kritérium szerint kiadsz egy másik selectet ez esetben ugyanarra a táblára valamilyen más szűréssel, aztán ha kiválasztotta a user, h melyik lesz a szülője, akkor kiadsz egy update-ot a megfelelő rekordra és beírod a kiválasztott szülő rekord id-ját a megfelelő mezőbe.
Ezen 3 művelet közben nem lesz megnyitva szerkesztésre az adott rekord (ideális megközelítésben legalábbis semmiképpen), hanem az sql szerver közben teszi a dolgát és amikor kiadod az update-ot a megfelelő rekordra, akkor megfogja és megcsinálja.
Triggerelést én is elengedném ezzel a problémával kapcsolatosan. -
Magnat
veterán
Üdv,
Mysql-ben van egy kis függvényem, ami egy adott mezőre (eladas_sum_brutto) végez műveleteket (lényegtelen, h mit) és ebből ad vissza egy értéket. (Bemenő paraméter az eladás id.)
Viszont jó lenne univerzálisra megcsinálni a függvényt úgy, h ne csak erre a mezőre lehessen meghívni hanem pl az eladas_sum_netto-ra is. Így azt találtam ki, h csinálok egy általános függvényt, aminek a második paramétere a mezőnév, amire az adott műveletet el kell végezni és egy változóba összerakva a lekérdezést dinamikus sql-lel futtatnám meg a PREPARE, EXECUTE, DEALLOCATE trió segítségével, csakhogy mint kiderült, a mysql nem támogatja a dinamikus sql-t tárolt eljárásban/függvényben, illetve triggerben.Van valakinek 5lete esetleg, hogyan tudnék egy sztringet (amiben a select össze van rakva a paraméterként kapott mezőnévvel) sql parancsként futtatni tárolt függvényben vagy muszáj lesz minden érintett mezőre külön megcsinálni a függvényt (vagy egy függvényben case-szel külön selecteket futattni attól függően, h mi a mezőnév paraméter)?
-
Magnat
veterán
válasz
martonx
#5513
üzenetére
Selectnél működik:
SET @row_number = 1;
SELECT
(@row_number:=@row_number + 1) AS num,`cust_partnerkod`
FROM cikktorzs_customer WHERE `cust_partnerkod`= 200000De update-nál nem, ugyanarra az értékre updateli az összes érintett sort:
SET @row_number = 1
UPDATE cikktorzs_customer c_c, (SELECT (@row_number:=@row_number + 1) AS num, cust_partnerkod AS i_c_p FROM cikktorzs_customer LIMIT 1 ) i_c_c SET `cust_partnerkod` = cust_partnerkod + @row_number WHERE cust_partnerkod = 200000 -
Magnat
veterán
"Sok fejfájástól megment, ha több tábla joinja alapján kell updatelni egy táblát..." - de ez egy tábla ...
"Egyébként már az updateedet sem értem, miért kéne többször lefutnia az alselectnek, ha egyre limitáltad a visszaadható eredmény számát?" - azért, mert egy rekordhoz egyszer kell lefusson, de az első update után változik az adatnézet, ha akkor újra kiértékelődik a belső select, akkor már az eggyel növelt értékű rekordot kellene (mármint a logikám szerint) megtalálnia.
-
Magnat
veterán
Üdv,
adott egy tábla (cikktorzs_customer) amiben a cust_partnerkod hibás kód miatt több ezer rekord esetében azonos értéket vett fel (200000). Akarnék egy updatet az érintett rekordokra ami annyit csinál, h kiolvassa a mindig aktuálisan legnagyobb partnerkódot és ahhoz egyet hozzáad.
UPDATE cikktorzs_customer c_c, (SELECT cust_partnerkod AS i_c_p FROM cikktorzs_customer ORDER BY cust_partnerkod DESC LIMIT 1) i_c_c
SET `cust_partnerkod` = i_c_p + 1
WHERE c_c.cust_partnerkod = 200000A gond ezzel annyi, h a belső select nem értékelődik ki újra minden alkalommal, így az összes rekord ami eddig 200000 volt, most 200001 lett. Ki tudja a megoldást?
Előre is köszi annak, aki
Új hozzászólás Aktív témák
- Steinberg UR 22 MKII Hangkártya
- BONTATLAN Új iPhone 17 PRO MAX Silver - Ezüst 256-512GGB Független 1év Apple G Azonnal átvehető.Deák
- MacBook Pro 13" 2019 i7 négymagos / 16GB / 256GB / 99% AKKSI
- Lian Li Strimer Plus V2 szett kontrollerrel (24-pin + Dual 8-pin GPU) Garanciális, alig használt!
- Zotac Nvidia Gtx 680 2gb
- í kilenc! AKCIÓS PRECÍZIÓS KÉSZÜLÉK! 7670 i9-12950HX 32GB RAM 1TB SSD Nvidia RTX A3000 12GB 1 év gar
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Eladó egy HP omen 17-w131ng laptop 1,5 TB ssd vel Dobozában
- Dell 14 Latitude 7450 WUXGA 2in1 Touch X360 Ultra5 135U 12mag 16GB 512GB Win11 Pro WiFi7 Garancia
- SzuperÁron! 5G LTE! Microsoft Surface Pro 8 i7-1185G7 16GB 512GB 1 év garancia - hajszálrepedt
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest


