Aan de JOIN
Mijn cms word steeds gecompliceerder, en dus ook de SQL.
Ik heb nu
Code (php)
1
2
3
2
3
<?php
$query_sub = "SELECT COUNT(*) FROM $subtabel WHERE artikel_id = '$huidig_artikel'";
?>
$query_sub = "SELECT COUNT(*) FROM $subtabel WHERE artikel_id = '$huidig_artikel'";
?>
het aantal reacties op een artikel wordt weergegeven. Maar eigenlijk moet ie deze alleen uitvoeren als er op het artikel ook daaddwerkelijk gereageerd mag worden. De beheerder kan dat instellen met "reageren" ENUM 'j', 'n'. Er moet dus een soort van Join (?) tussen beide tabellen. Iemand die me kan helpen?
Zo niet, ga normaliseren en vergeet niet om innoDB te gebruiken.
Als je later bedenkt dat je reacties wilt tonen over een artikel, waarbij door de beheerde ingegeven mag worden of er op gereageerd mag worden ja of nee, dan hoeft het datamodel niet incorrect te zijn.
De tip over innoDB is een goede, maar niet alle providers hebben daar beschikking over, of hebben die beschikbaar gesteld.
Het probleempje is ook prima op te lossen met een JOIN:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
artikel_naam
FROM
artikelen AS a
INNER JOIN(
subtabel AS s
INNER JOIN
reacties r
ON r.artikel_id = s.artikel_id)
ON s.artikel_id = a.artikel_id
WHERE a.reageren = 'j';
artikel_naam
FROM
artikelen AS a
INNER JOIN(
subtabel AS s
INNER JOIN
reacties r
ON r.artikel_id = s.artikel_id)
ON s.artikel_id = a.artikel_id
WHERE a.reageren = 'j';
Speel met de verschillende typen joins die ik in mijn tutorial, waar ik je eerder in het topic al naar heb verwezen, aanhaal om het juiste resultaat te krijgen
Je haalt immers geen gegevens op uit subtabel, dus dat moet geen probleem zijn. Ik zou dan ook eerder een query al dit verwachten:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
COUNT(r.id) AS aantal
FROM
reacties AS r
INNER JOIN
artikelen AS a
ON
a.id = r.artikel_id
WHERE
a.reageren = 'j'
COUNT(r.id) AS aantal
FROM
reacties AS r
INNER JOIN
artikelen AS a
ON
a.id = r.artikel_id
WHERE
a.reageren = 'j'
En bovendien is het dan zoals Frank al zegt natuurlijk wel van belang dat je ook op database niveau een relatie legt tussen de tabellen. Je zult in de reacties tabel dus een foreign key op moeten nemen die verwijst naar de artikelen tabel. En met mysql is deze constraint alleen aan te brengen als je de InnoDB engine gebruikt.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Doet deze query niet precies hetzelfde?
Ja, een INNER JOIN kun je ook schrijven dmv een WHERE clausule waarin je de koppeling opneemt. Een verschil in schrijfwijze, maar geen verschil in uitvoering.
Je hebt helemaal gelijk, het was te laat gister denk ik :P (meestal is het later, maar af en toe heb ik schijnbaar wel meer slaap nodig)