hoi ik heb in men db 2 tabellen: (ik geef enkel even de belangrijke gegevens voor dit probleem)
ot_categories: id, Name
ot_posts: id,Category,Title, ...
in het veld van Category zit opgeslaan in welke categoriën een post zit op deze manier: 2;5;6
Nu wil ik een SQL query maken die de huidige categoriën toont en daarbij het aantal posts.
Ik heb al heel wat gebrobeert en kom er maar niet uit (ook al geprobeert met de mensen van IRC channel).
[edit]momenteel heb ik deze code:[/edit]
SELECT ot_categories.id, ot_categories.Name, COUNT( ot_posts.id ) as Posts
FROM ot_categories
LEFT JOIN ot_posts ON ( ot_categories.id = ot_posts.Category )
GROUP BY ot_categories.id
ORDER BY ot_categories.Name
in het veld van Category zit opgeslaan in welke categoriën een post zit op deze manier: 2;5;6
Tja, dan zit er een fout in het datamodel. Dit had je met een koppeltabel aan elkaar moeten knopen om vanuit de database het verband te leggen.
ot_categories: id,
Name
ot_posts: id,
Title, ...
catagories_posts:
id (is niet nodig wanneer je een UNIQUE zet op de combinatie van de beide andere kolommen) id_categories (foreignkey met het id in de tabel ot_categories) id_posts (foreignkey met het id in de tabel ot_posts)
Uiteraard gebruik je de innoDB-engine van MySQL, MyISAM ondersteunt geen foreignkeys waardoor de boel als los zand aan elkaar hangt.
Succes met de aanpassing! En dat kun je beter nu doen, dan wanneer je echt hopeloos in de problemen zit...
ik weet wel dat het een verkeerd model is e.d. maar het is een script/datamodel dat niet van mij is en ik wil het niet helemaal gaan aanpassen.
ik heb het opgelost en de query ziet er nu zo uit:
SELECT ot_categories.id, ot_categories.Name, COUNT(ot_posts.id) as Posts FROM ot_categories
LEFT JOIN ot_posts
ON (
ot_posts.Category = ot_categories.id
OR
ot_posts.Category LIKE CONCAT('%;', ot_categories.id)
OR
ot_posts.Category LIKE CONCAT('%;', ot_categories.id,';%')
) GROUP BY ot_categories.id
ORDER BY ot_categories.Name
hoi bedankt om te reageren,
ik weet wel dat het een verkeerd model is e.d. maar het is een script/datamodel dat niet van mij is en ik wil het niet helemaal gaan aanpassen.
slecht, erg slecht...
en tevens jammer, erg jammer
en ook nog zonde, erg zonde
Tja, wat valt hier van te zeggen... Een koppeltabel was een fluitje van een cent geweest en had een hoop toekomstige problemen kunnen voorkomen. Nu heb je jezelf nog verder in de nesten gewerkt. Het is voor jou te hopen dat er geen bugs in het systeem zitten (bestaan zo'n systeem eigenlijk wel???) en dat er nooit onderhoud hoeft plaats te vinden.
Tevens is het te hopen dat er niet veel mensen van dit systeem gebruik gaan maken, met dit soort lapmiddelen wordt het systeem namelijk onnodig traag. Je kunt bv. geen indexen gebruiken op ot_categories.id. En laat dat nu juist zo zinvol zijn!