- LG G8X - kettőn áll a vásár
- LG V40 ThinQ - olajozott gépezet
- LG V60 ThinQ 5G - hangoskönyv
- iPhone topik
- Extra erő egy gombnyomásra - Engwe EP-2 Boost
- LG Velvet (4G) - megelőzte a híre
- LG V50 ThinQ Dual Screen - az 5G ára
- Google Pixel topik
- Profi EKG-s óra lett a Watch Fitből
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
Új hozzászólás Aktív témák
-
don_peter
senior tag
User mindig létezik, ha már készült bejegyzése, más módon inaktiválódik..
Ezen kívül, ha van rá igény, azt kellene még megcsinálni, hogy a topikonként a legújabb hozzászólás dátumát és felhasználóját helyesen összegyűjteni, mert egy ilyen GROUP BY-t egy szigorúbb adatbáziskezelő (pl. DB2, MSSQL, Oracle) kapásból visszadob hibával, mert nem determinisztikus az eredmény. (Azt, hogy a MySQL egyáltalán megenged ilyet, én inkább hiányosságnak tartom, mint feature-nek - OK, kikapcsolható ez a működés.)
Erre egy példát tudnál készíteni nekem?
A topikok összességét nem limitálom, de gondolom, ha eljön az ideje azt is meg fogom oldani, bár még egyelőre nincs elképzelésem hogyan..
Itt tudod megnézni miről is van szó: [link]A fórum bejegyzések limitálva vannak termesztésen, maximum 20db van 1 lapon...
-
don_peter
senior tag
A fenében
Totálisan igazad van, kezdek megvakulni..
Gondolom most már az lehet a baj, hogy egy hete folyamatában megállás nélkül írom az új kódokat és már kezdek belefáradni.A leegyszerűsített kód ami működik:
SELECT * FROM
(SELECT t.id, t.title, fu.datum, u.nick
FROM topik t
LEFT JOIN forum_uzenetek fu
ON fu.topik_id = t.id
LEFT JOIN users u
ON u.id = fu.user_id
WHERE t.topik_csoport_id = 9
ORDER BY fu.datum DESC) AS a
GROUP BY id ORDER BY datum DESCGondolom erre gondoltál te is...
-
don_peter
senior tag
válasz
don_peter #1728 üzenetére
No ez már jó
Hátha tudok vele segíteni...
Aki tud ennél egyszerűbb megoldást az kérem ossza meg velem.
Köszönöm.SELECT * FROM
(SELECT * FROM
(SELECT t.id, t.title, fu.datum, u.nick
FROM forum_uzenetek fu
LEFT JOIN topik t
ON fu.topik_id = t.id
JOIN users u
ON u.id = fu.user_id
WHERE t.topik_csoport_id = 9
ORDER BY fu.datum DESC) AS a
UNION
SELECT t.id, t.title, "1970-01-01" as datum, NULL as nick
FROM topik t
where t.topik_csoport_id = 9
) c
GROUP BY id ORDER BY datum DESC -
don_peter
senior tag
válasz
don_peter #1727 üzenetére
Nos kicsi átalakítással már működik is és elég gyors 0.1mp-es lefutási időt produkál.
SELECT * FROM
(SELECT * FROM
(SELECT t.id, t.title, fu.datum, u.nick
FROM forum_uzenetek fu
LEFT JOIN topik t
ON t.id = fu.topik_id
JOIN users u
ON u.id = fu.user_id
WHERE t.topik_csoport_id = 9) as a
GROUP BY a.id
UNION
SELECT t.id, t.title, "1970-01-01" as datum, NULL as nick FROM topik t where t.topik_csoport_id = 9) c
GROUP BY id ORDER BY datum DESCKöszi a segítséget és az elvi rávezetést...
ui: öhh, még sem jó..
Nem jól szelektálja az utolsó bejegyzéseket.
Ennek még utána nézek.. -
don_peter
senior tag
válasz
Apollo17hu #1726 üzenetére
Ez sajnos nem fut le, de értem a gondolat meneted..
Próbálkozom, hátha tudom javítani a kódot. -
don_peter
senior tag
válasz
Apollo17hu #1724 üzenetére
Van UNION..
Utána nézek...
Ha van egy megoldásod, akkor az is jöhet..
Köszi.. -
don_peter
senior tag
Srácok van egy ilyen lekérdezésem:
SELECT * FROM
(SELECT t.id,
t.title,
fu.datum,
u.nick
FROM forum_uzenetek fu
LEFT JOIN topik t
ON t.id = fu.topik_id
JOIN users u
ON u.id = fu.user_id
WHERE t.topik_csoport_id = 9
ORDER BY fu.datum DESC) AS a
GROUP BY id ORDER BY datum DESCA kód hibája az, hogy ha nincs bejegyzés egy meglévő topikban, akkor azt nem listázza ki.
Tudom, hogy itt a hozzászólásokhoz van csatolva a dolog, de miképpen tudom ezt úgy megoldani, hogy azt a topikot is listázza amelyikben még nincs bejegyzés?
Természetesen azt a végére kell kilistáznia.Erre a részre, ha beteszek egy ilyet:
ON t.id = fu.topik_id or t.id
Akkor listázza, de az első helyen és belassítja kb. 10szeresen a lefutási időt.
Ráadásul nem is jó így...Előre is köszönöm.
-
don_peter
senior tag
válasz
Apollo17hu #1715 üzenetére
Bár a lekérdezésed lefut és majdnem jó is csak valamiért szelektál.
Nem az összes bejegyzést figyeli.Most ezt írtam és használom ez jól működik, legalább is úgy tűnik:
SELECT * FROM
(SELECT t.id, t.title, fu.datum, u.nick
FROM forum_uzenetek fu
LEFT JOIN topik t
ON fu.topik_id = t.id
JOIN users u
ON u.id = fu.user_id
ORDER BY fu.datum DESC) AS a
GROUP BY id ORDER BY datum DESC LIMIT 8 -
don_peter
senior tag
válasz
Apollo17hu #1712 üzenetére
Igen az nem jó, ezt én is tudom ezen tovább is léptem már.
Most már az egész lekérdezést nézem nem csak részleteket.
Sok a subselect és ez megnehezíti a lekérdezést. -
don_peter
senior tag
válasz
Apollo17hu #1712 üzenetére
Makszimum 8 topik jelenik meg az utolsó bejegyzések alapján csökkenő sorban.
-
don_peter
senior tag
válasz
Apollo17hu #1707 üzenetére
Ezt a nyelvet már nem ismeri.
Legalább is ebben a formában.
Köszi azért, el voltam vele kicsit -
don_peter
senior tag
válasz
Apollo17hu #1707 üzenetére
A limit 8 azt jelenti, hogy csak 8 record-ot kérjen le. Esetünkben a 8 legfrissebbet.
-
don_peter
senior tag
válasz
don_peter #1705 üzenetére
Gondolok itt ilyesmire:
SELECT t.id AS tid,
t.title AS title,
MAX(fu.datum) AS updatum,
u.nick AS nev
FROM forum_uzenetek AS fu,
topik AS t,
users AS u
WHERE fu.topik_id = t.id AND u.id = fu.user_id
GROUP BY t.id,
t.title
u.id
ORDER BY `updatum` DESC LIMIT 8Vagy ezt tovább már nem lehet feszegetni?
-
don_peter
senior tag
válasz
Apollo17hu #1704 üzenetére
Köszönöm, ez így 3.8-4mp-ről 0.18-0.22mp-re csökkentette a lekérdezési időt.
A csoportosítást lehet még tovább bonyolítani?
Ha mondjuk még kíváncsi lennék a bejegyzést készítő felhasználó nevére? -
don_peter
senior tag
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t ALL NULL NULL NULL NULL 119 Using temporary; Using filesort
2 DEPENDENT SUBQUERY fu index NULL datum 6 NULL 1 Using whereEz nekem nem sokat mond.
Extrákba ez van a topik-nál: Using temporary; Using filesort
A SUBQUERY -nél: Using where -
don_peter
senior tag
Srácok kérnék egy kis segítséget.
A következő SQL lekérdezésem szeretném optimalizálni, de nem tudom, hogy fussak neki.
SELECT
t.id AS tid,
t.title AS title,
(SELECT fu.datum
FROM forum_uzenetek AS fu
WHERE fu.topik_id = t.id
ORDER BY fu.datum DESC LIMIT 1) AS updatum
FROM topik AS t
ORDER BY updatum DESC LIMIT 8Ez a lekérdezése egy a legújabb bejegyzéseket listázza, topikokra bontva.
Tehát a fő lekérdezés a topik-okon megy végig, de a rendezésük a fórum üzeneteinek utolsó dátuma szerint történik.Ezt csak ilyen csúnyán tudtam megoldani ami eddig tökéletes volt, de az új SQL már nem támogatja vagy is iszonyat lassan fut csak le.
Előre is köszönöm a segítséget. -
-
don_peter
senior tag
Köszönöm srácok a segítséget.
Kiderült, hogy az új MySQL program illetve annak készítői hibásan írták meg az adatbázis kezelőt és ezért van hiba vagy is iszonyatos lassulás.
Termesztésen ismerik a problémát már mint az SQL fejlesztők és írnak is róla:
http://bugs.mysql.com/bug.php?id=69219 -
don_peter
senior tag
válasz
martonx #1684 üzenetére
Nem értelek.
Beszólsz, majd most a szakmai részét hozod elő.
Tessék segíteni egy véleményed szerint jó és optimálisabb megoldással, sokkal előnyösebb lenne mint a kioktató magatartás.
Nyilvánvaló, hogy nem azért teszem fel itt a kérdést mert annyira képbe vagyok, ezen elcsodálkozni nem kellene.
Segítségre van szükségem hisz itt biztosan csak okosabbak vannak nálam e témában.
Köszönöm az előző javaslatod, éppen ez van most folyamatban.. -
don_peter
senior tag
Köszönöm, beírtam, de időt nem ad ki.
MySQL közvetlen felületén futtatom most a parancssort.A többit persze, így csináltam, és a subselect-ek szűkítésével egyre gyorsabbá vált a lefutási idő.
De ez előtte nem volt gond, viszont most közel 30szorosára emelkedett a lefutási idő.
Fura.. -
don_peter
senior tag
válasz
martonx #1676 üzenetére
"Kik, mikor hol? Te tákoltad anno össze ezt az izét?"
Nem értelek.A kik mikorra és holra a válasz, ha jól értem eme sorodat:
Szolgáltató, kb. 2 hete, a teljes webszerver farmukon.
A "Te tákoltad anno össze ezt az izét?" nem értem.
Milyen izé, és milyen ledegradáló jelző az, hogy tákoltad.?
Én készítettem még anno, ha erre céloztál. -
don_peter
senior tag
válasz
don_peter #1673 üzenetére
A példában látható, hogy a fő formon belül van egy subselect.
A subselecthez érve az SQL egy újabb ciklusba kezd amely addig fut amíg kigyűjti, hogy az adott fórumbejegyzést író felhasználónak mennyi az eddigi összes bejegyzéseinek száma.
Amikor ez megvan akkor tovább lép és folytatja a parancsok végrehajtását.
Eddig ez a lekérdezési forma tökéletes és gyors volt, de most állítólag az új verzió élesítésével a rendszer korlátozza az erőforrásigényeket ezért tapasztalható a lassulás.
Tény és való, hogy van olyan felhasználó akinek több mint 5e bejegyzése van és ekkora számú rekordnál már ez a fajta struktúra erőforrás pocséklónak tűnhet.
A példa nem az eredeti adatbázist tükrözi, de a struktúra megegyezik.Váram megtisztelő javaslataitokat és segítségeteket.
-
don_peter
senior tag
Tiszteletem a mestereknek.
Kérnék egy kis segítséget illetve tanácsot.
Van egy fórumom amelyen MySQL frissítést hajtottak végre amellyel 5.6.23-ra változott a verzió szám.
A problémám az, hogy a frissítés előtt nagyon gyors volt egy-egy lekérdezés, de most iszonyatosan belassult.
Régebben 1-1 fórum lekérés kb. 1-3mp-et vett igénybe, most ugyan ez a lekérés 70-80mp-ig is eltart.A lekérésben van kb 10db subselect amellyel az olyan táblákat kérdezem le amelyeket nem tudok jointolni mivel azok nem szorosan kapcsolódnak az aktuálisan lekért és fő form-hoz.
Ezek a subselectek inkább amolyan kis kiegészítők, de még is fontos információt hordoznak amelyeket a felhasználok gyakran használnak így fontos, szerves részét képezik a rendszernek.Észre vettem, hogy ha elkezdem kivenni a subselecteket a fő form-ból, akkor a lekérdezés ideje drasztikusan csökken.
A kérdésem ezzel kapcsolatban az lenne, hogy mi lenne egy optimálisabb lekérdezési struktúra fórum esetében?
Előbb kérjem le az esetleges fórum adatokat, majd PHP kilistázása közben kérdezzem le a további táblákat?A fórum amiről szó van, ha érdekes a válasz miatt: neo-geo.hu
Bármelyik topikot meg lehet nyitni.
Előre is köszi a segítséget.ui:
Egy példa a mostani struktúrára:leker("SELECT
fu.id AS fid,
(SELECT count(fou.id)
FROM f_uzenetek AS fou
JOIN felh AS us
ON fou.user_id = us.id
WHERE fou.felh_id = fu.felh_id) AS msg_db,
FROM f_uzenetek AS fu
JOIN felh AS u
ON u.id = fu.felh_id
JOIN topik AS t
ON t.id = fu.topik_id
WHERE fu.topik_id=23 ORDER BY fu.date DESC LIMIT 1,25");
Új hozzászólás Aktív témák
Hirdetés
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Soundbar, soundplate, hangprojektor
- HiMedia lejátszók
- Autós topik
- exHWSW - Értünk mindenhez IS
- Xbox Classic / Xbox 360
- Stellar Blade
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- Minden, ami Unreal Engine
- TCL LCD és LED TV-k
- További aktív témák...
- Lenovo ThinkPad T14 Gen 3:i5 1250P(12mag),16GB,512GB,14"matt TOUCH,vil.HU bill,Lenovo gari 2026.6.25
- Amazfit Gtr 3 Pro okosóra dobozával újszerű állapotban
- i3-8100 + ASUS H310M alaplap + 8GB RAM egyben (félkonfig)
- Asztali PC , R5 5500 , RX 6700 XT , 32GB RAM , 512GB NVME , 1TB HDD
- Sony PlayStation 5 Fat 825 GB eredeti doboz, gyári kontroller
- PlayStation Plus Premium előfizetés 3291 Ft / hó áron!
- Huawei Nova Y90 128GB, Kártyafüggetlen, 1 Év Garanciával
- Csere-Beszámítás! Asztali számítógép PC Játékra. I5 12400F / RTX 3070 / 32GB DDR4 / 1TB SSD
- Bomba ár! Lenovo ThinkPad L480 - i5-8GEN I 8-16GB I 256GB SSD I 14" FHD I HDMI I Cam I W11 I Gari!
- Gombászkönyvek egyben
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest