Forum Query, werkt niet naar behoren.
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:
hij geeft echter dit:
de query:
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
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)
1
2
3
2
3
categorie
subcategorie 1 | 3 | 1 | Milo, 01 november 2010, 17:48
subcategorie 2 | 2 | 2 | Milo, 01 november 2010, 17:48
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)
1
2
3
2
3
categorie
subcategorie 1 | 4 | 2 |
subcategorie 2 | 3 | 2 | Milo, 01 november 2010, 17:48
subcategorie 1 | 4 | 2 |
subcategorie 2 | 3 | 2 | Milo, 01 november 2010, 17:48
de query:
Code (php)
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
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";
?>
$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
Gesponsorde koppelingen:
Is alles wel een left join?
Je group by klopt niet. Je selecteert meer dan waarop je groepeert.
Je group by klopt niet. Je selecteert meer dan waarop je groepeert.
(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() ?
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.
Ik ben nog even wat tutorials aan het lezen over joins, had niet verwacht dat het hierin kon zitten *schaamt zich...*.
En je group by klopt ook niet.
Zeker bij ingewikkeldere dingen is het handiger om bijvoorbeeld een erd op te stellen.
Zeker bij ingewikkeldere dingen is het handiger om bijvoorbeeld een erd op te stellen.
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.)
Ik moet nu eten, maar tips zijn welkom...
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)
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
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
";
?>
$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
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?
Bump, sorry maar 't gaat niet voorspoedig, zit nog steeds vast.
Ik heb het zelfde probleem, heb jij het misschien op kunnen lossen?



