Väldigt simpelt förklarat ser mina tabeller ut såhär:
Tabell A:
+--------------------------------------------------+
| id | namn | beskrivning | anamn | datum | status |
|--------------------------------------------------|
| 1 | X | dansar | kalle | 080326| 2 |
|--------------------------------------------------|
| 2 | Y | pratar | kalle | 080325| 2 |
|--------------------------------------------------|
| 3 | Z | springer | oskar | 080324| 2 |
+--------------------------------------------------+
Tabell B:
+--------------------------------------------------+
| id | aid | anamn | text | datum | status |
|--------------------------------------------------|
| 1 | 1 | oskar | coolt | 080326| 0 |
|--------------------------------------------------|
| 2 | 1 | nils | najs | 080326| 0 |
|--------------------------------------------------|
| 3 | 3 | kalle | bra | 080326| 0 |
|--------------------------------------------------|
| 4 | 2 | kalle | häftigt | 080325| 0 |
+--------------------------------------------------+
Tabell C:
+------------------------------+
|aid| anamn | datum | status |
|------------------------------|
| 1 | nils | 080326| 0 |
|------------------------------|
| 1 | oskar | 080326| 0 |
|------------------------------|
| 1 | kalle | 080326| 0 |
|------------------------------|
| 2 | oskar | 080326| 0 |
|------------------------------|
| 3 | oskar | 080326| 0 |
+------------------------------+
Sammanfattning:
Tabell B och C är relationstabeller till Tabell A. Jag vill plocka ut ALLA värden och sedan skriva ut dem, på något sätt. Jag vill också räkna ut hur många poster som har en relation till posterna i Tabell A.
Exempel:
Jag väljer id=1 i Tabell A. Hur många har en relation till det värdet i Tabell B? Jo aid=1, 2 gånger. Jag vill därmed att siffran 2 ska skrivas ut.
Vi gör detsamma mellan Tabell A och C med samma id=1. Då får vi aid=1, 3 gånger - och därmed ska siffran 3 skrivas ut.
Skulle vi ta id=3 i Tabell A skulle vi få värdena 1 och 1.
----------
Jag hoppas ni förstår vad det är jag vill åstadkomma. För att ge er så mycket information som möjligt ger jag er den sql jag använt, men inte lyckats få att fungera riktigt. Jag ska inte ta åt mig hela äran för denna då jag fick hjälp med den på ett annat forum:
SELECT
f.id AS id,
f.title AS title,
f.description AS description,
f.username AS username,
f.pubdate AS pubdate,
COUNT(v.id) AS votes,
COUNT(c.featureid) AS comments
FROM
features f
LEFT JOIN
votes v
ON
v.id=f.id AND v.deleted=0
LEFT JOIN
comments c
ON
c.featureid=2 AND c.deleted=0
WHERE
f.status=3
GROUP BY f.title
ORDER BY f.pubdate DESC
sqlen ovan gjordes utifrån den här undre, som jag gjorde från början men hade problem med:
SELECT
f.id AS id,
f.title AS title,
f.description AS description,
f.username AS username,
f.launchdate AS launchdate,
COUNT(v.id) AS votes,
COUNT(c.featureid) AS comments
FROM
features f,
votes v,
comments c
WHERE
f.status=3 AND
v.deleted=0 AND
v.id=f.id AND
c.deleted=0 AND
c.id=f.id
GROUP BY
f.id
ORDER BY
f.launchdate DESC
På vilket sätt fungerar det inte? Vilket DBMS används?
Du kan ju testa följande:
SELECT
f.id AS id,
f.title AS title,
f.description AS description,
f.username AS username,
f.pubdate AS pubdate,
sum(case when v.id is null then 0 else 1 end) AS votes,
sum(case when c.featureid is null then 0 else 1 end) AS comments
FROM
features f
LEFT JOIN
votes v
ON
v.id=f.id AND v.deleted=0
LEFT JOIN
comments c
ON
c.featureid=2 AND c.deleted=0
WHERE
f.status=3
GROUP BY f.title
ORDER BY f.pubdate DESC
Tack! Med hjälp av andra fick jag fram något liknande din sql-sats. Du hade dock löst det där med att om c.featureid och v.id är noll så visas inte det resultatet, annorlunda än vad vi kom fram till (kanske tom bättre).
Man inser att man har en del att lära när man ser era maffiga satser :P tack för din tid :)
130 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe