17. november 2005 - 10:55Der er
9 kommentarer og 1 løsning
JOIN og COUNT
Hejsa
Jeg håber nogen kan hjælpe mig med et problem jeg har med en SQL-query. (MySQL) Jeg har nogle tabeller i databasen (nyheder, afstemninger, billeder osv) som alle indeholder en reference til et bruger ID. Hvordan kan jeg med en enkelt query udtrække hvor mange nyherder, afstemninger og billeder hver enkelt bruger har oprettet?
Tabellerne kunne se sådan ud:
news: id | userId
poll: id | userId
image: id | userId
Jeg har prøvet lidt forskelligt, men jeg kan ikke finde ud af det..
(SELECT COUNT(*) FROM news WHERE userId=X) UNION (SELECT COUNT(*) FROM poll WHERE userId=X) UNION (SELECT COUNT(*) FROM image WHERE userId=X)
da jeg ikke tror at disse virker:
SELECT (SELECT COUNT(*) FROM news WHERE userId=X)+(SELECT COUNT(*) FROM poll WHERE userId=X)+(SELECT COUNT(*) FROM image WHERE userId=X)
SELECT COUNT(*) FROM (SELECT id FROM news WHERE userId=X) UNION (SELECT id FROM poll WHERE userId=X) UNION (SELECT id FROM image WHERE userId=X)
Synes godt om
Slettet bruger
17. november 2005 - 12:04#2
Tak for svaret, men det var ikke det som var meningen.. Jeg vil have et resultat som ser sådan ud: userId | newsCount | pollCount | imageCount 1 | 1 | 0 | 0 2 | 6 | 2 | 7 3 | 0 | 0 | 22 osv
SELECT * FROM (SELECT userId,COUNT(*) AS nnews FROM news GROUP BY userID) cnews, (SELECT userId,COUNT(*) AS npoll FROM poll GROUP BY userID) cpoll, (SELECT userId,COUNT(*) AS nimage FROM image GROUP BY userID) cimage WHERE cnews.userId=cpoll.userId AND cpoll.userId=cimage.userId
Synes godt om
Slettet bruger
17. november 2005 - 12:33#4
Den der var faktisk en af de ting jeg havde prøvet. Men på den måde får man jo kun brugere som oprettet minumum 1 af hver 'ting'.. (Grundet at JOIN'en..)
(SELECT * FROM (SELECT userId,COUNT(*) AS nnews FROM news GROUP BY userID) cnews RIGTH JOIN ((SELECT userId FROM news) UNION (SELECT userId FROM poll) UNION (SELECT userId FROM image)) all ON cnews.userId=all.userId) cnews2,
(SELECT * FROM (SELECT userId,COUNT(*) AS npoll FROM poll GROUP BY userID) cpoll RIGTH JOIN ((SELECT userId FROM news) UNION (SELECT userId FROM poll) UNION (SELECT userId FROM image)) all ON cpoll.userId=all.userId) cpoll2,
(SELECT * FROM (SELECT userId,COUNT(*) AS nimage FROM image GROUP BY userID) cimage RIGTH JOIN ((SELECT userId FROM news) UNION (SELECT userId FROM poll) UNION (SELECT userId FROM image)) all ON cimage.userId=all.userId) cimage2
WHERE cnews2.userId=cpoll2.userId AND cpoll2.userId=cimage2.userId
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.