Versio

Forum Query, werkt niet naar behoren.

Overzicht Reageren

Milo S

Milo S

25/11/2010 16:16:03
Quote Anchor link
Beste,

Ik heb voor mijn forum index pagina de volgende query (zie onder uitleg). Deze query zou er voor moeten zorgen dat ik op mijn index pagina de volgende structuur zou moeten krijgen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
categorie
    subcategorie 1    |   3   |   1   |   Milo, 01 november 2010, 17:48
    subcategorie 2    |   2   |   2   |   Milo, 01 november 2010, 17:48


hij geeft echter dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
categorie
    subcategorie 1    |   4   |   2   |
    subcategorie 2    |   3   |   2   |   Milo, 01 november 2010, 17:48


de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
$qry
= "SELECT
            cat.title                                  AS cat,
            
            subCat.id                                  AS subCatID,
            subCat.title                               AS subCat,
            
            COUNT(t.id)                                AS topics,
            
            u.username,
            
            DATE_FORMAT(p.dateTime, '%d %M %Y, %H:%i') AS newPostDateTime,
            COUNT(p.id)                                AS posts
        FROM
            forum AS cat
        LEFT JOIN
            forum AS subCat
        ON
            cat.id = subCat.parent_id
        LEFT JOIN
            forum_topic     AS t
        ON
            subCat.id = t.cat_id
        LEFT JOIN
            forum_post      AS p
        ON
            t.id = p.top_id
        LEFT JOIN
            user            AS u
        ON
            p.user_id = u.id
        WHERE
            cat.parent_id = 0
        GROUP BY
            subCat.id
        ORDER BY
            cat.id,
            subCat.title"
;
?>


Ik geraak er niet meer uit, ik heb 4 left join om alles te kunnen selecteren, en groepeer op de subcategorie zodat alles netjes weergegeven word. Ziet iemand waar ik de plank totaal missla in deze query?

Gr, milo
 
PHP hulp

PHP hulp

24/05/2012 17:12:14
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Karl Karl

Karl Karl

25/11/2010 16:36:52
Quote Anchor link
Is alles wel een left join?
Je group by klopt niet. Je selecteert meer dan waarop je groepeert.
 
Bas Cost Budde

Bas Cost Budde

26/11/2010 14:48:21
Quote Anchor link
(heeft het niet uitgeprobeerd) Wanneer je LEFT JOINt, kunnen waarden uit de aangejoinde tabel NULL zijn. Dat levert een niet-match op voor in de SELECT. Krijg je goede resultaten wanneer je NULLs opvangt met COALESCE() ?
 
Karl Karl

Karl Karl

26/11/2010 15:03:50
Quote Anchor link
Bas Cost Budde op 26/11/2010 14:48:21:
(heeft het niet uitgeprobeerd) Wanneer je LEFT JOINt, kunnen waarden uit de aangejoinde tabel NULL zijn. Dat levert een niet-match op voor in de SELECT. Krijg je goede resultaten wanneer je NULLs opvangt met COALESCE() ?


Je moet naar de verschillende soorten joins kijken. Wat hun eigenschappen e.d. zijn.
Ik denk dat een left join hier verkeerd is, aangezien je vast en zeker relaties hebt die niet null moeten hebben.
COALESCE ken ik niet. Maar lijkt mij ook niet correct.
 
Milo S

Milo S

26/11/2010 16:39:58
Quote Anchor link
Ik ben nog even wat tutorials aan het lezen over joins, had niet verwacht dat het hierin kon zitten *schaamt zich...*.
 
Karl Karl

Karl Karl

26/11/2010 16:46:43
Quote Anchor link
En je group by klopt ook niet.
Zeker bij ingewikkeldere dingen is het handiger om bijvoorbeeld een erd op te stellen.
 
Milo S

Milo S

26/11/2010 16:50:18
Quote Anchor link
Okee, ik ga even met deze tips aan de slag. Lukt het niet horen jullie het wel weer ;).

Edit 1
Ik heb in ieder geval zo'n ERD gemaakt. Bij me forum_post tabel stond eerst ook een cat_id, maar dit is volgens mij overbodig zodra ik een inner join gebruik niet waar?

Klik hier voor de ERD

Edit 2
Na ook wat info over de GROUP BY door te hebben genomen ben ik erachter wat je bedoelde. Alle geselecteerde items behalve de COUNT() gedeeltes moeten in de GROUP BY komen. Tot nu toe kan ik niet zeggen dat me resultaat beter wordt, maar dit kan aan de JOIN fouten liggen neem ik aan...

Edit 3
Momenteel heb ik dit (denk de lijntjes weg, is om even overzichtelijk te zijn.)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
$sql
=
"
SELECT
    cat.title                                  AS cat,
            
    subCat.id                                  AS subCatID,
    subCat.title                               AS subCat
FROM
    forum AS cat

-------------------------------------
LEFT JOIN
    forum              AS subCat
ON
    cat.id = subCat.parent_id    
-------------------------------------
INNER JOIN
    (
    forum_topic        AS t
        
        INNER JOIN
            forum_post AS p
        ON
            t.id = p.top_id
    )
    ON
        subCat.id = t.cat_id
-------------------------------------
WHERE
    cat.parent_id = 0
GROUP BY
    cat.title,
    subCat.id,
    subCat.title
ORDER BY
    cat.id,
    subCat.title
"
;
?>


Ik moet nu eten, maar tips zijn welkom...
Gewijzigd op 28/11/2010 15:08:36 door Milo S
 
Milo S

Milo S

28/11/2010 15:07:14
Quote Anchor link
Ondertussen nog steeds veel aan het lezen, maar blijf het een lastig onderwerp vinden. Zit ik wel een beetje in de goede richting of zit ik me blind te staren op iets totaal verkeerds?
 
Milo S

Milo S

06/12/2010 15:38:30
Quote Anchor link
Bump, sorry maar 't gaat niet voorspoedig, zit nog steeds vast.
 
Hertog Jan

Hertog Jan

04/08/2011 11:18:26
Quote Anchor link
Ik heb het zelfde probleem, heb jij het misschien op kunnen lossen?
 



Overzicht Reageren