webForumDet fria alternativet

ta data från flera tabeller

2 svar · 444 visningar · startad av flaerpen

flaerpenMedlem sedan mars 20084 inlägg
#1

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

Ett stort tack på förhand /flaerpen

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Välkommen till wF!

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
flaerpenMedlem sedan mars 20084 inlägg
#3

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 :)

127 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)