Hirdetés
- OLED monitor topic
- Azonnali informatikai kérdések órája
- Melyik a legerősebb Low Profile VGA kártya?
- Kompakt vízhűtés
- Kivégezheti a kisebb VGA-gyártókat az NVIDIA döntése
- Projektor topic
- AMD vs. INTEL vs. NVIDIA
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Itt a Valve GŐZGÉP — Steam Machine, mi vagy te? 🧐
- Pánik a memóriapiacon
Aktív témák
-
faster
nagyúr
Nekem az a gyanúm, hogy a cim fölösleges, ki lehet szedni.
Szerk: hozzaszolas.nick AS nick, mert a kapott result setben a PHP nyelvi sajátosságai miatt pont nem lehet (tehát nem tudod úgy elérni, hogy $row[''hozzaszolas.nick'' ]), ezért az AS-sal át kell nevezni.
[Szerkesztve] -
L3zl13
nagyúr
Ha az SQL stringre gondolsz akkor:
select tema.tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema.tema_id,cim
Az eleje gondolom egyértelmű, a lényeg, hogy ne *-ozz mert akkor nem nagyon tudsz count meg hasonló kifejezéseket használni.Ehelyett szépen felsorolod azokat az oszlopokat amire szükséged van.
A count(xyz) azt jelenti, hogy nem kiírja egyenként az xyz-ket, hanem csak megszámolja őket.
Pl ha az lenne a query, hogy ''select count(tema_id) from tema'' akkor csak egy számot kapnál eredménynek. Mégpedig a témák számát.
az 'as hozzászólás' azért van, hogy könnyebben lehessen hivatkozni a fügvény eredményeképp kapott mezőre kiíratáskor.
'from tema' gondolom egyértemű
left outer join - ezzel kapcsolod össze a két táblát, mégpedig olyan módon, hogy a baloldali tábla (left) minden eleme szerepel az eredményképpen kapott összesített táblában, míg a jobboldali táblából csak azok az elemek, amelyek az összekapcsolási feltételnek megfelelnek.
hozzaszolas - a másik tábla neve
on tema.tema_id=hozzaszolas.tema_id - Az összekapcsolási feltétel. Innen tudja, hogy a hozzaszolas táblábol melyik sor a tema tábla melyik sorához tartozik. (Ahol a tema_id -k megegyeznek.)
group by tema.tema_id,cim - csoportosítás tema_id és cím szerint. Ez azért kell, hogy a hozzászólások táblát a count-nál ne egybe vegye, hanem tema_id-nként számolja össze a hozzászólások számát.
Utolsó hozzászólóhoz szerintem külön lekérdezés kell. -
L3zl13
nagyúr
A teljes kódon nincs kedvem túlrágni magam mert elég bonyolult.
De próbálom elmondani:
Alaphelyzet:
$query_tema = ''SELECT * FROM tema''; volt a lekérdezés.
Eredményeképp kaptál egy kétoszlopos tömböt amit kiírattál egy kétoszlopos táblába, soronként ciklusból.
A fenti lekérdezés HELYETT:
$query_tema='select tema.tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema.tema_id,cim';
Eredménye egy 3 oszlopos tömb. Amit egy 3 oszlopos táblába íratsz ki ugyanúgy mint az alapverzióban.
Az első 2 oszlop változatlan kell hogy legyen, a 3. oszlop neve ''hozzaszolas''. És az adott témához tartozó hozzászólások számát tartalmazza.
Semmi más művelet nem szükséges az alaphelyzethez képest.
[Szerkesztve] -
faster
nagyúr
Hu hu hú, de bonyolult.
Mindkét táblában van egy ''tema_id'' nevű mező, ezért helyette a ''táblaneve.tema_id'' jelölést kell használni.
select tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema_id,cim
helyett
SELECT hozzaszolas.tema_id AS tema_id, cim, count(hozzaszolas_id) AS hozzaszolas FROM tema LEFT OUTER JOIN hozzaszolas ON tema.tema_id=hozzaszolas.tema_id GROUP BY hozzaszolas.tema_id
Remélem, ez jó lesz. -
L3zl13
nagyúr
Ezzel már mennie kéne:
$query_tema='select tema.tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema.tema_id,cim';
És ne kérdezd le külön a témákat meg a hozzászólások számát, ebben már mindkettő benne van!
Az eredményként kapott tábla első oszlopa az id, második a cim, harmadik a hozzászólások száma.
[Szerkesztve] -
L3zl13
nagyúr
Szerintem próbáld meg ezt:
$query_tema='select tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema_id,cim';
És a script végén a Do-while ciklusba beraksz még egy harmadik oszlopot a táblához, és egy ilyet:
<?php echo $row_tema['hozzaszolas'
; ?>
[Szerkesztve] -
faster
nagyúr
-
faster
nagyúr
Valami ilyesmit kell, hogy kapjál a resultset-ben:
+----+---------------------------------+-------+
| id | cim | darab |
+----+---------------------------------+-------+
| 3 | egyéb | 0 |
| 1 | Az élet nagy kérdései | 2 |
| 2 | Az élet nem olyan nagy kérdései | 3 |
+----+---------------------------------+-------+
Szerk: Az oszlopok elcsúsztak, remélem, a lényeg azért látszik.
[Szerkesztve] -
L3zl13
nagyúr
$query_tema=''select tema_id,(select count(hozzaszolas_id) from hozzaszolas) as hozzaszolas, tema_cim from tema'';
Vagy
$query_tema=''select tema_id, count(hozzaszolas_id) as hozzaszolas, tema_cim from tema, hozzaszolas where tema.tema_id=hozzaszolas.tema_id group by tema_id,tema_cim'';
[Szerkesztve]
Aktív témák
- Apple Watch Series 7 44mm, használt,Töltővel,12 hó garanciával
- HIBÁTLAN iPhone 14 Pro Max 512GB Silver -1 ÉV GARANCIA - Kártyafüggetlen, 100% Akkumulátor
- TELJES KÖRŰ IT BESZERZÉS
- VADIÚJ Bontatlan! Honor 400 Lite 8/256 AMOLED 120Hz Velvet Grey, Dual SIM 2év gar
- LG 50QNED85T3A / QNED / 50" - 127 cm / 4K UHD / 120Hz / HDR Dolby Vision / FreeSync Premium / VRR
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest

; ?>


