| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| - Registriert seit: Jan 2004
Beiträge: 3.002
| [MySql] Join/Sum falsche Ergebnisse
Hi =) Es gibt eine user-table (User) und 3 Tutorial-Tables (Text, Video und Other). Jedes Tutorial hat die Attibute rating_positive and rating_negative und ist über eine user_id eindeutig einem User zugeordnet. Ich möchte die 10 besten User mit den meisten Tutorials haben und dazu noch die summe der Bewertungen ihrer Tutorials positiv und negativ. Ich habe das hier versucht, da kommen zwar die richtigen User bei raus, aber die Werte für die summe der Tutorials und der Bewertungen ist viel zu hoch (ca 375 mal so hoch, wie sie sein sollten..) Code: SELECT u.id AS user_id, (COUNT(t.id) + COUNT(v.id) + COUNT(o.id)) AS tutorials_count, (SUM(t.rating_positive) + SUM(v.rating_positive) + SUM(o.rating_positive)) AS pos, (SUM(t.rating_negative) + SUM(v.rating_negative) + SUM(o.rating_negative)) AS neg FROM user u LEFT JOIN trick t ON u.id = t.submitter_id LEFT JOIN video v ON u.id = v.submitter_id LEFT JOIN other o ON u.id = o.submitter_id GROUP BY u.id ORDER BY tutorials_count DESC LIMIT 10 Grüße pape
__________________ mfG, Robert Tutorials: [TUTORIAL] XML-Files in Flash einlesen+weiter verarbeiten Steuerung zwischen Zeitleisten & Movieclips [TUTORIAL] MP3-Player (+XML) [TUTORIAL] MP3-Player (+XML) Part II Geändert von pape (05-07-2010 um 20:10 Uhr) |
| | |
| | #2 (permalink) |
| mod_rewrite Registriert seit: Feb 2003 Ort: München
Beiträge: 15.621
|
Ganz spontan: Nimm mal statt LEFT JOIN ein normales JOIN …
__________________ RTFM Wie man Fragen richtig stellt. Achim Bindannmalweg Money makes the world go round, fear makes it turn much faster. (New Model Army) |
| | |
| | #3 (permalink) |
| - Registriert seit: Jan 2004
Beiträge: 3.002
|
Hi, was genau meinst du mit "normales Join"? Wenn ich das Schlüsselwort "LEFT" weg lasse bekomme ich die gleichen Ergebnisse. Das hier: Code: SELECT u.id AS user_id, (COUNT(t.id) + COUNT(v.id) + COUNT(o.id)) AS tutorials_count, (SUM(t.rating_positive) + SUM(v.rating_positive) + SUM(o.rating_positive)) AS pos, (SUM(t.rating_negative) + SUM(v.rating_negative) + SUM(o.rating_negative)) AS neg FROM user u, trick t, video v, other o WHERE u.id = t.submitter_id AND u.id = v.submitter_id AND u.id = o.submitter_id GROUP BY u.id ORDER BY tutorials_count DESC LIMIT 10
__________________ mfG, Robert Tutorials: [TUTORIAL] XML-Files in Flash einlesen+weiter verarbeiten Steuerung zwischen Zeitleisten & Movieclips [TUTORIAL] MP3-Player (+XML) [TUTORIAL] MP3-Player (+XML) Part II Geändert von pape (05-07-2010 um 23:33 Uhr) |
| | |
| | #4 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.868
|
da ist ein Logikfehler in deinem Query. da gehören gar keine Joins rein. versuch es mal so: Code: SELECT
submitter_id AS user_id,
COUNT(*) AS tutorials_count,
SUM(rating_positive) AS pos,
SUM(rating_negative) AS neg
FROM (
SELECT submitter_id, rating_positive, rating_negative FROM trick
UNION ALL
SELECT submitter_id, rating_positive, rating_negative FROM video
UNION ALL
SELECT submitter_id, rating_positive, rating_negative FROM other
) AS temptable_all_tutorials
GROUP BY user_id
ORDER BY tutorials_count DESC
LIMIT 10; |
| | |
| | #5 (permalink) | |
| - Registriert seit: Jan 2004
Beiträge: 3.002
|
Hi & Danke! Der Query liefert die richtigen Ergebnisse und leuchtet mir auch ein. :-) Wenn ich nun aber noch u.* (also alle User-Daten) will, dann brauche ich noch einen Join mit der user-table. Danke! Zitat:
Zudem liegt noch ein ORM dazwischen (Doctrine). Beste Grüße pape
__________________ mfG, Robert Tutorials: [TUTORIAL] XML-Files in Flash einlesen+weiter verarbeiten Steuerung zwischen Zeitleisten & Movieclips [TUTORIAL] MP3-Player (+XML) [TUTORIAL] MP3-Player (+XML) Part II Geändert von pape (06-07-2010 um 07:55 Uhr) | |
| | |
| | #6 (permalink) | |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.868
| Zitat:
Nur für die Daten aus deinem bisherigen Query war es halt nicht notwendig. | |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Upload Listener liefert falsche Ergebnisse | mirzahat | ActionScript 2 | 4 | 13-02-2007 10:53 |
| [mySQL] suche - vorschau der ergebnisse | dassoud | PHP und MySQL | 3 | 03-05-2006 18:41 |
| mysql - gerade/ungerade ergebnisse anders darstellen | redman | PHP und MySQL | 6 | 11-08-2004 21:09 |
| JOIN :: MySQL | alexpetri | PHP und MySQL | 8 | 01-06-2004 13:34 |
| warum liefert array.sort falsche ergebnisse?? | Rudi Ratlos | ActionScript 1 | 5 | 16-07-2002 17:00 |