[MySQL] FROM 2 tabellen
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
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
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
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?
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
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
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
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
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
En dit:
LEFT JOIN
articlereply r
betekent dat er ook nog een tabel articlereply is. Hoe ziet die er uit?
articlereply
replyID
articleID -> article.id
...
@Robert: Dat werkt volgens mij sowieso niet, want als je COUNT gebruikt moet je ook GROUP BY gebruiken...
Gewijzigd op 01/01/1970 01:00:00 door - -
Niemand?