Ik heb voor het selecteren van nieuwsartikelen met meerde categorieën deze query gemaakt:


	SELECT 
		a.id, 
		a.title, 
		a.imageUrl AS articleImageUrl, 
		a.date, 
		c.imageUrl AS catImageUrl, 
		COUNT( r.replyid ) AS nrReplies 
	FROM 
		article a, 
		article_cats c_koppel
	LEFT JOIN 
		articlereply r 
	ON 
		a.id = r.articleID 
	LEFT JOIN
		category c
	ON
		c.id = c_koppel.cid
	WHERE 
		a.articleType = 'news'
	AND 
		a.id = c_koppel.aid 
	AND 
		DATE_ADD(a.date, INTERVAL 3 DAY) >= NOW()
	GROUP BY 
		a.id 
	ORDER BY 
		date DESC 


De structuur van de tabellen:

article
id -> article_cats.aid
title
imageUrl
date
articleType

article_cats
id
aid -> article.id
cid -> category.id

category
id -> article_cats.cid
imageUrl
name

Als het goed is moet ik m.b.v. deze query dus voor elke category van een artikel een aparte rij krijgen, met daarin de gezelecteerde velden. Die kan ik dan vervolgens verwerken tot 1 rij per artikel, waarin dan een array zit met de imageUrl van de categorieën.

Nu is het probleem dat hij maar 1 rij selecteert per artikel, ook als er in article_cats 5 rijen staan voor dat artikel, en het dus eigenlijk 5 rijen zou moeten teruggeven.

Weet iemand waar de fout ziet?
En zo?
SELECT 
        a.id, 
        a.title, 
        a.imageUrl AS articleImageUrl, 
        a.date, 
        c.imageUrl AS catImageUrl, 
        COUNT( r.replyid ) AS nrReplies 
    FROM 
        article a, 
        article_cats c_koppel
    LEFT JOIN 
        articlereply r 
    ON 
        a.id = r.articleID 
    LEFT JOIN
        category c
    ON
        c.id = c_koppel.cid
    WHERE 
        a.articleType = 'news'
    AND 
        a.id = c_koppel.aid 
    AND 
        DATE_ADD(a.date, INTERVAL 3 DAY) >= NOW()
     ORDER BY 
        a.id,    
        date DESC
Geef eens een voorbeeld van de gewenste output? Dus hoe het er op de pagina uit komt te zien?

En dit:
LEFT JOIN
articlereply r
betekent dat er ook nog een tabel articlereply is. Hoe ziet die er uit?
dat is de tabel met replies:

articlereply
replyID
articleID -> article.id
...

@Robert: Dat werkt volgens mij sowieso niet, want als je COUNT gebruikt moet je ook GROUP BY gebruiken...
Niemand?

Reageren