- Nagyon zavarja a brit hatóságot az Apple Safari böngészője
- Gazdasági parazitizmus: a franciák is perelik a Metát az AI-tréningezés miatt
- Triplázás jöhet: az Amazon és a Google szerint az atomenergia a jövő
- Beindultak a kínai startupok, a fejlesztőkért versenyez az OpenAI
- Indiaiak százait mentették ki a scamközpontokból
Új hozzászólás Aktív témák
-
pch
senior tag
válasz
shipfolt #5962 üzenetére
Én az alábbit csinálnám:
ID: auto increment
Feladat: varchar(255)
Leírás: text
Határidő: date
Kész: enum('n';'i')
Sor: int(10)
Függ: int(10) NULLBeírod a feladatot. Ha rendezni kell akkor a sor mondja meg hol van (tizessével szoktam számolni, de ha fel kell cserélni 2 sort akkor ugye update és kész)
A függ-be ha van érték akkor az az adott ID-jű feladattól függ, ha nincs akkor nincs függése.
A függésre nézz olyan példát ahol egy menü van táblázatba. Na ez is olyan Főmenű + almenű. Csak itt ugye feladat lezárása előtt le kell kérdezni, hogy a függő feladat (aminek ugye tudjuk az ID-jét) kész-e. Ha igen mehet a feladat rögzítése benne a függő ID-vel. -
pch
senior tag
Üdv!
Van egy tábla benne tételek.
Legyen rendelés a neve ( tetel_id, fej_id, menny, ar, kedv)
Szeretném őket groupolni és az összesítő szerint updatelni.
Azaz:
SELECT tetel_id, fej_jd, sum(menny), ar, kedv FROM rendeles WHERE fej_id=? GROUP BY tetel_id, ar, kedv
Ez a lekérdezés ugye pont ezt csinálja, hogyha azonos az ár és a kedvezmény összevonja a cikkeket.
Hogy tudom megcsinálni, hogy ennek a lekérdezés eredményét visszarakja a rendeles táblába, felülírva azt.
Gondoltam temp táblára, majd abba insert a fenti select majd delete a fej_id szerint majd megint instert és törölni a temp-ből utána.
De ez legalább 3 lekérés.
Van-e ennél jobb módszer?Köszi
-
pch
senior tag
Most már ennyire átírtam, hogy a pénztár s bank táblákat összejoin-oltam és azt tettem left joinba. De az eredmény ugyanaz..
SELECT t1.szamla_id, t1.vevo_id, t1.vnev, t1.brutto, (ROUND(IFNULL((SUM(t2.bevetel)-(t2.kiadas)),0),2)+ROUND(IFNULL((SUM(t4.bevetel)-(t4.kiadas)),0),2)) as fizetve
FROM kimszamla AS t1
LEFT JOIN (banklista AS t2,bank AS t3) ON (t1.szamla_id=t2.szamla_id AND t2.bank_id=t3.bank_id)
LEFT JOIN (penztarlista AS t4,penztar AS t5) ON (t1.szamla_id=t4.szamla_id AND t4.penztar_id=t5.penztar_id)
WHERE t1.tipus='0'
AND t1.teljesites <= '2023-12-01'
AND t3.datum <= '2023-12-01'
AND t5.datum <= '2023-12-01'
AND t2.kivezetes = 'V_SZ'
AND t4.kivezetes = 'V_SZ'
GROUP BY t1.vevo_id;Mintha lesz@rna left join vagy right join van inner join lenne. Az eredmény mindig ugyanaz
-
pch
senior tag
LEFT JOIN nem működik a mariadb-nél, vagy én nézek be valamit?
Szóval 5 táblából kell összevadászni az adatokat.
Van a számlák tábla, benne a számla ID-vel, a partner ID-vel, partnernév, bruttó.
Van a bank tábla, ebben a bank id és dátuma most a releváns.
Van a bank tétel, ebben a bank id, brutto, szamla id az érdekes.
Van a pénztár tábla. itt pénztar id és dátum kell.
Van a pénztár tétel, ebben a pénztár id és számla id kell.Kellenek azok a számlák amik a megadott nap és előtte nem lettek fizetve.
Amivel próbálkoztam:SELECT t1.szamla_id, t1.vevo_id, t1.vnev, t1.brutto, ROUND(IFNULL((SUM(t2.bevetel)-(t2.kiadas)),0),2) AS bank, ROUND(IFNULL((SUM(t4.bevetel)-(t4.kiadas)),0),2) AS penztar
FROM kimszamla AS t1
LEFT JOIN banklista AS t2 ON t2.szamla_id=t1.szamla_id
LEFT JOIN bank AS t3 ON t3.bank_id=t2.bank_id
LEFT JOIN penztarlista AS t4 ON t4.szamla_id=t1.szamla_id
LEFT JOIN penztar AS t5 ON t5.penztar_id=t4.penztar_id
WHERE t1.tipus='0'
AND t1.teljesites <= '2023-01-01'
AND t3.datum <= '2023-01-01'
AND t5.datum <= '2023-01-01'
AND t2.kivezetes = 'V_SZ'
AND t4.kivezetes = 'V_SZ'
AND bank+penztar<>brutto
GROUP BY t1.szamla_id
ORDER BY t1.vevo_id ASCViszont csak 2 partnert gyűjt ki. Amik nincsenek benne a pénztár/bank táblába azokat nem.
A left join-nak nem az a lényege, hogy az induló táblából az összes adat ott legyen? -
pch
senior tag
Nekem jól adja vissza amit írtam...
-
pch
senior tag
Szerintem meg ütközik az sql elvével is.
Ugye egy 1NF kimondja, hogy egy táblába nem lehetnek táblázatértékű oszlopok.
Relációs adatbázis elv.
Szóval ha van egy név adatunk meg egy telefonszám adatunk nem lehetnek egy táblázatba már az első normálformázásnál se. -
pch
senior tag
Üdv!
mariadb 10.9.3 re frissítve a 10.5.8 ról nagyon lelassult a többszörös join lekérdezés.
Másnál nem fordult elő ez a hiba? -=A lekérdezés 349.2095 másodpercig tartott=-
Soknak érzemTábla méretek: cikktábla: 5930 rekord
Tétel tábla: 36715 rekord
Készletfej tábla: 9599 rekord
Szerintem nem sok.
Lekérdezés:SELECT t5.cikk_id,t4.menny,t4.cikkszam,t4.megnevezes from cikk as t5
LEFT JOIN
(
SELECT tetel.cikk_id,SUM(IF(tetel.tetel_id < COALESCE(t2.setid, 0),0,IF(tetel.mozgasnem < 200, tetel.menny, 0 - tetel.menny))) AS menny ,cikk.cikkszam , cikk.megnevezes
FROM keszletfej,cikk,tetel
LEFT JOIN
(SELECT cikk_id, MAX(tetel_id) AS setid
FROM tetel
WHERE mozgasnem = 100
GROUP BY cikk_id
) AS t2ON (tetel.cikk_id = t2.cikk_id)
WHERE
keszletfej.teljesites<='2022-11-05'
AND cikk.cikk_id=tetel.cikk_id
AND keszletfej.keszletfej_id=tetel.keszletfej_id
AND cikk.keszletre='i'
AND cikk.status='aru'
GROUP BY tetel.cikk_id
ORDER BY tetel.cikk_id
) AS t4
ON t4.cikk_id=t5.cikk_id
WHERE t4.menny<>0
Cikk tábla ami releváns (cikk_id, cikkszam, megnevezes, keszletre, status)
Készletfej tábla (keszletfej_id, teljesites)
Tétel tábla (tetel_id, keszletfej_id, cikk_id, menny, mozgasnem)
Mozgásnem: Ha 200 alatt van akkor beszerzés ha 200 felett akkor értékesítés ha 100 akkor nyitó azaz akkor onnantól annyi a készlet.
Ezzel a lekéréssel az összes cikk készlete kellene aminek a mennyisége nagyobb mint 0.Van ötletetek mi lehet a hiba, vagy tudtok valamit mi változott?
Már kezdek megőrülni lassan egy hónapja sz@p@k veleKöszi!
-
pch
senior tag
Üdv!
Mariadb 10.9.3-nál másnál is belassult a join utáni like '%keresés%' ?
Van egy eléggé sokrétű lekérdezés. Eddig simán ment max 0.5mp volt. Ez a legutolsó update során felment 4.5mp-re.
Így áttértem a match against-re beállítva az egy karakteres limitet.
Viszont ez ugyen csak a szó elejétől keres, és az ügyfelek eléggé hogy is mondjam.. nem tetszik nekik.
Szóval másnál is előfordult? -
pch
senior tag
Az alábbi lekérdezést meg lehet csinálni egy lekérdezésbe vagy három kell?
Van két tábla.
Első táblába azonosító és hivatkozás.
Második tábla azonosító és hivatkozás.
Kellene a két tábla unioja, de úgy, hogy ahol az azonosító és a hivatkozás megegyezik ott az union-ba az egy sor legyen.
példa:
Első:
123;zöld
123;kék
123;sárga
Második:
456;zöld
123;kék
456;lilaKimenet:
123;zöld;-;-;
123;kék;123;kék
123;sárga;-;-;
-;-;456;zöld;
-;-;456;lila;Köszi!
-
pch
senior tag
Ez az update nem azt csinálja. Lehet félreérthető voltam.
Szóval az information mezőbe valahol van az ean kód. Ezt akarom átrakni egy ean mezőbe.
Ugye a regxp azt csinálja, hogy megnézi a szövegben azt a részt ahol egymás után 13 szám van. Azaz a bemenő szövegből az ean marad (Jó esetben). Ezt meg az update-nél fel tudom már használni. -
pch
senior tag
Üdv!
regexp -be kellene segítség, de lehet nem is lehet megvalósítani amit akarok...
Szóval van egy tábla (cikk) amibe az információknál (information) van a termékeknek az EAN kódja megadva. Azaz a leírás tartalmazza.
Most szeretném azt megoldani, hogy ahol nem az ean mezőbe van az EAN kód ott egy update-t lefuttatva belerakom.
Egyelőre a lekérdezésnél tartok, de a regexp nem nagyon úgy működik ahogy elképzeltem és a google csak a Where feltételbe hozza példának.
Szóval:SELECT cikk.information PREGEXP '^[0-9]{13}$' FROM cikk WHERE cikk.cikk_id='2';
Nos ez az ami nem ad csak egy 0-t. Egyáltalán lehet ezt így? Vagy hogy kellene hatékonyan kiszűrni az adatokat egy mezőből?
Vagy írjam meg php-ba ciklusba?Köszi!
-
pch
senior tag
Ez nem azt az eredményt adja.
Mégegyszer: A kuldes_id és a szamla_id a tételeknél van. Egy rendeléshez több tétel is kapcsolódik. Ha a tételnél a kuldes_id-be 0 van akkor ugye azzal még kell foglalkozni. De van olyan eset is ahol mondjuk 10 tételnek már van kuldes_id-je ami nem 0 de egynek nincs.
Akkor azzal még van teendő.
-
pch
senior tag
Sziasztok!
Having helyett mit lehetne (ha lehet) az alábbiak megvalósítására? (Illetve van egy subselect is)
van egy rakat tábla, de csak a 3 fontosat említem
rendelés tábla (rendelés id, meg a szokásos dolgok)
tétel tábla (tétel_id, rendeles_id, kuldes_id, szamla_id)
user tábla (user_id, usernev, rendeles_tmp)Ha valaki dolgozik akkor a rendelés id-t berakja az user tábla rendeles_tmp-be egy trigger.
Kellene egy lista amibe azon a rendelések vannak amin akad még tennivaló.
Ezt onnan tudjuk, hogy a kuldes vagy a szamla id a tételnél 0.Most kb ez a lekérdezés:
SELECT T1.redeles_id,
min(T2.kuldes_id) AS kuldes_min,
min(T2.szamla_id) AS szamla_min
FROM rendeles AS T1
LEFT JOIN tetel AS T2 ON T1.rendeles_id=T2.rendeles_id
AND rendeles_id NOT IN (SELECT IFNULL(rendeles_tmp,0) FROM user)
GROUP BY T1.rendeles_id
HAVING kuldes_min=0 AND szamla_min=0
persze mint mondtam van még egy rakat tábla ami a fejléchez van joinolva, de azok nem lényegesek. Pl.: szállítási mód, fizetési mód stb.
A rendelés 35690 bejegyzés míg a tétel 116984.
A min és a having miatt kissé lomha a lekérdezés, azaz 1.22mp-et vár a kliens mire megkapja az adatokat.
Kérdésem, hogy lehet-e valamennyit gyorsítani valahogy?
Indexek természetesen vannak.Köszi!
-
pch
senior tag
Üdv!
mysql UNION-nál kellene nekem olyan megoldás, hogy az eredmény ne egy tábla több sor legyen, hanem egy sorba az összes eredmény (mondjuk vesszővel elválasztva) mint php alatt az implode.
van mondjuk 3 tábla amit union-al összefűzök. mindegyik táblából lekérem az ID-t.
Akkor az eredmény lesz egy ID tábla 3 értékkel.
Van erre valami megoldás, hogy egy sor legyen benne a 3 érték.
Fel szeretném használni egy másik lekérésbe ahol az IN-t fogom használni, csak ugye annak meg sorozat kell.
Azaz később lesz egy SELECT * FROM xy WHERE id IN ( ide jön az union-os összefűzés)
Így most ugye 3 lekérdezést futtatok, ezt szeretném egyre redukálni.Köszi!
-
pch
senior tag
válasz
baracsi #5491 üzenetére
Igen. Abban a strukturában amit kialakítottam abban nem tudom lemodellezni.
De levázolom nagyvonalakba.
Minden egy táblázatban van. Van a mozgas tábla. Benne mozgáskód mennyiség érték.
Ha a mozgáskód 101-199 akkor bevét. Ha 201-299 kiadás. Ha 100 akkor nyitó készlet.
Szóval ha 100-akkor onnantól kell számolni az adott cikk FIFO-ját. Ha ebben a táblába nincs 100-as akkor értelemszerűen ugye az első 101-199 mozgáskódtól kell számolni a beszerzési oldalt. Kiadási oldalon (gondolom, de ezt meg kellene erősíteni) az elejétől kell számolni. (Vagy ott is a 100-astól?)
Szóval nekem nincs két táblám. Amiket néztem sql utasítást/függvényt az mindegyik külön táblázatból számolgatott. Sőtt ott nincs is ilyen, hogy nyitó tétel. -
pch
senior tag
Üdv!
FIFO számításba tud valaki segíteni? (Akár term.nem ingyen)
Ami nálam a bonyolultság, hogy:
Minden mozgás egy táblába van vezetve. Van olyan mozgás amitől számolni kell és van olyan mikor az elejétől az egészet.
Szóval amiket eddig néztem fifo példakódokat, vagy nem bírtam már értelmezni vagy nem működtek megfelelően...Köszi!
-
pch
senior tag
Üdv!
Az alábbit kellene megoldanom, de nem jövök rá a nyitjára..
Van egy tábla benne a számla alap adatok (nevezzük T1, mezők: szamla_is, vevo_id, kelte, tejlesites, esedekes, brutto)
Van további két táblakapcsolat. Mindkettő ugyanaz így egyet írok le:
(fejléc legyen T2, mezők: id, datum törzs legyen T3, mezők: id, fej_id, szamla_id, osszeg)
Értelemszerűen a másik tábla is ugyanez:
(fejléc legyen T4, mezők: id, datum törzs legyen T5, mezők: id, fej_id, szamla_id, osszeg)Mivel a két utóbbi táblába szerepelHET a számla_id így union-al összefűzve (ha kézzel beírom az id-t le tudom kérni a legnagyobb dátumot:
SELECT max(datum) as fizetve FROM (
(SELECT T2.datum FROM T2, T3 WHERE T2.id=T3.fej_id AND szamla_id='keresett számla')
UNION
(SELECT T4.datum FROM T4, T5 WHERE T4.id=T5.fej_id AND szamla_id='keresett számla')
)
Így kapok egy fizetve dátumot ami ugye megegyezik azzal amit keresek.
Viszont amit szeretnék, hogy ez a fizetve dátum szerepeljen a számla lekérdezés eredményébe.Azaz
SELECT T1.szamla_id,T1.vevo_id,T1.esedekes,T1.brutto (ide jönne a fizetve lekérés ami a keresett számla szöveg helyett a T1.szamla_id-t kellene tartalmaznia )
FROM T1 WHERE T1.vevo_id='vevőazonosító'Remélem érthetően fogalmaztam...
Szóval az összes UNION módot és SELECT módot már megpróbáltam...
Van rá lehetőség? Mert ugye php alatt foreach-ba árgyazott lekéréssel meg lehet kerülni, de ugye az ahány számla annyi adatkapocslat lenne a fizetve dátum miatt. Ami nem jó..Köszönöm!
-
pch
senior tag
Szerintem jobban járna egy mysql-el. Annak ott a phpnyadmin. Ott tud adatot bevinni meg sql-t lekérni.
Wamp-al felmegy pár klikkre. -
-
pch
senior tag
válasz
Apollo17hu #5214 üzenetére
Ha csak annyi hogyha nagyobb mint 0 akkor legyen nulla akkor arra ott az if
IF(eredmeny>0,0,eredmény) -
pch
senior tag
Ha már mysql lenne egy kérdésem
Van egy tábla amibe a dátumok vannak (meg egyéb adatok, de ez most nem lényeg)
Van egy másik tábla amibe egy adott dátumhoz hozzá van fűzve egy érték.
Meg van egy harmadik tábla amibe van egy kezdőérték.
Melyik az a számolási metódus amivel a kezdőértékhez ha hozzáadom a dátumnál letárolt értéket az lesz a következő kezdőérték, és ha talál egy későbbi dátum<>értéket azt az előzőhöz adja hozzá?
php alatt ugye a x=x+y
Azaz egyik táblába vannak mondjuk a hónap-napok egymás után (2021-08-01 ... 2021-08-31)
Másik tábla (2021-08-20 1500) (2021-08-23 3500)
A harmadik táblába az induló 5000
Akkor ezt szeretném kapni:
2021-08-01 től 2021-08-19 ig 5000,
utána 6500
majd 23-tól 10000
Köszönöm! -
pch
senior tag
-- delete --
Új hozzászólás Aktív témák
- Független Xiaomi 14 512 GB fehér telefon még 25 hónap garanciával
- X1 Carbon 9th 27% 14" FHD+ IPS i5-1135G7 16GB 256GB NVMe ujjlolv IR kam
- AKCIÓ!!! GAMER PC: RYZEN 5 3600-5600X + RTX 3060 Ti / 3070 / 3080 + Új 16-32GB DDR4! GAR/SZÁMLA!
- HP 15s-eq1036nh - 15,6"FullHD IPS - Ryzen 5 4500U - 8GB - 512GB SSD - Win11 - MAGYAR
- Roborock S8 White, 2 év garancia
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest