php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 3 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 26-06-2010, 16:38
Cappo
 Registrierter Benutzer
Links : Onlinestatus : Cappo ist offline
Registriert seit: Aug 2009
Beiträge: 43
Cappo befindet sich auf einem aufstrebenden Ast
Standard mehrere SUM() und COUNT() addieren

Hallo,

ich habe ein Problem und zwar will ich zwei SUM() und zwei COUNT() Ergebnisse addieren aber irgendwie kommt was raus was nicht stimmen kann. Hier mal meine mysql Query:

Code:
SELECT user.name, user.right_id, 
SUM(group_bet.points+final_bet.points) AS sumPoints, COUNT(group_bet.bet_id+final_bet.bet_id) AS bets
FROM user 
LEFT JOIN group_bet
ON group_bet.user_id = user.user_id
LEFT JOIN final_bet
ON final_bet.user_id = user.user_id
GROUP BY user.user_id
ORDER BY sumPoints DESC, bets DESC
Ich hoffe ihr versteht was ich erreichen will und könnt mir bei meinem kleinen Problem helfen...

MfG
Cappo
Mit Zitat antworten
  #2 (permalink)  
Alt 26-06-2010, 18:20
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Welches Ergebnis bezweckst du mit COUNT()? COUNT(group_bet.bet_id+final_bet.bet_id) ergibt nämlich keinen Sinn.
Mit Zitat antworten
  #3 (permalink)  
Alt 26-06-2010, 18:25
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

ich glaub er will damit ermitteln, wieviele Einzelgebote letztlich die sumPoints ergaben ...

dabei sollte er aber die Counts getrennt vornehmen .also ein Count für die normalen bets und einer für die final_bets .. ich glaub nicht, dass MySQL bei COunt mit einer Mischung aus 2 Spalten so klarkommt
__________________

Wer LESEN kann, ist klar im Vorteil!
Mit Zitat antworten
  #4 (permalink)  
Alt 26-06-2010, 19:33
Cappo
 Registrierter Benutzer
Links : Onlinestatus : Cappo ist offline
Registriert seit: Aug 2009
Beiträge: 43
Cappo befindet sich auf einem aufstrebenden Ast
Standard

Also in "bets" sollen zum Schluss alle Tipps (natürlich addiert) eines Users stehen und in "sumPoints" alle Punkte (natürlich addiert). Da aber jeweils die bets und die points in zwei verschiedenen Tabellen sind weiß ich nicht wie ich die in einer Query zusammenrechnen kann...

MfG
David
Mit Zitat antworten
  #5 (permalink)  
Alt 26-06-2010, 20:03
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

COUNT(group_bet.bet_id) + COUNT(final_bet.bet_id) ?
Mit Zitat antworten
  #6 (permalink)  
Alt 26-06-2010, 20:13
Cappo
 Registrierter Benutzer
Links : Onlinestatus : Cappo ist offline
Registriert seit: Aug 2009
Beiträge: 43
Cappo befindet sich auf einem aufstrebenden Ast
Standard

Hmmm bringt auch nicht das richtige raus...
Mit Zitat antworten
  #7 (permalink)  
Alt 26-06-2010, 20:32
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Vielleicht solltest du erstmal erklären, was du eigentlich erreichen willst. Wie man sieht, ist es keine so gute Idee, die Leute das von der Query ableiten zu lassen, die gar nicht das macht, was sie soll.
Mit Zitat antworten
  #8 (permalink)  
Alt 26-06-2010, 21:18
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

mal so als bescheidene Frage warum stehen bei dir eigentlich gleichwertige Informationen (zumindest aus Sicht dieser Abfrage) in 2 verschiedenen Tabellen? könntest du die nicht in einer Tabelle erfassen?
__________________

Wer LESEN kann, ist klar im Vorteil!
Mit Zitat antworten
  #9 (permalink)  
Alt 26-06-2010, 21:27
Cappo
 Registrierter Benutzer
Links : Onlinestatus : Cappo ist offline
Registriert seit: Aug 2009
Beiträge: 43
Cappo befindet sich auf einem aufstrebenden Ast
Standard

Also...
ich habe unteranderem 2 Tabellen wo jeweils die Tipps (Bets) der User drin stehen...warum 2 Tabellen? in beiden Tabellen sind teilweise verschiedene Attribute (Spalten)...

nun will ich eine Rangliste der User machen die als erstes nach den gesamten Punkten der User und als zweites die Anzahl der Tipps ordnet (absteigend). Ich brauche dazu also die Gesamtpunkzahl und die Gesamtanzahl der Tipps jedes einzelnen Users.

Ich hoffe das hilft euch weiter...

MfG
David
Mit Zitat antworten
  #10 (permalink)  
Alt 26-06-2010, 23:13
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

hmmm .. unterschiedliche Spalten....

machst du bei einem Tipp eines Users einen Eintrag nur in eine der Tabellen oder in beide? ..Dann wäre ja theoretisch die Abfrage auf eine der Tabellen ausreichend ... offensichtlich bist du ja selbst mit den Daten nicht zufrieden ...

Ich würde dir daher als Startpunkt empfehlen - Mach ein Selekt, dass dir vorerst alle Datensätze liefert - ohne Sum und Count .. und schau, ob du dabei alle Einträge erhältst, die du erwartest - danach kannst du dann mit Sum und Count die zusammenfassung machen .. logischerweise müsstest du dann ja das richtige ergebnis kriegen ...
__________________

Wer LESEN kann, ist klar im Vorteil!
Mit Zitat antworten
  #11 (permalink)  
Alt 26-06-2010, 23:16
Cappo
 Registrierter Benutzer
Links : Onlinestatus : Cappo ist offline
Registriert seit: Aug 2009
Beiträge: 43
Cappo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von eagle275 Beitrag anzeigen
hmmm .. unterschiedliche Spalten....

machst du bei einem Tipp eines Users einen Eintrag nur in eine der Tabellen oder in beide? ..Dann wäre ja theoretisch die Abfrage auf eine der Tabellen ausreichend ... offensichtlich bist du ja selbst mit den Daten nicht zufrieden ...

Ich würde dir daher als Startpunkt empfehlen - Mach ein Selekt, dass dir vorerst alle Datensätze liefert - ohne Sum und Count .. und schau, ob du dabei alle Einträge erhältst, die du erwartest - danach kannst du dann mit Sum und Count die zusammenfassung machen .. logischerweise müsstest du dann ja das richtige ergebnis kriegen ...
Bei einem Tipp kommt immer nur ein Eintrag in einer der beiden Tabelle (entweder group oder final)...ok werde die das mal ausprobieren was du geschrieben hast...
Mit Zitat antworten
  #12 (permalink)  
Alt 27-06-2010, 11:42
Cappo
 Registrierter Benutzer
Links : Onlinestatus : Cappo ist offline
Registriert seit: Aug 2009
Beiträge: 43
Cappo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Cappo Beitrag anzeigen
Bei einem Tipp kommt immer nur ein Eintrag in einer der beiden Tabelle (entweder group oder final)...ok werde die das mal ausprobieren was du geschrieben hast...
Also ich bins nochma,

ich hab das nun probiert aber und es funktioniert soweit. ich habe nun ein Select gemacht wo ich alle Tipps der User bekomme und alle Punkte (nicht zusammengezählt)...aber wie mach ich das nun das ich diese nun für jeden einzelnen User zusammenzählen und somit ordnen kann?

MfG
David
Mit Zitat antworten
  #13 (permalink)  
Alt 27-06-2010, 18:00
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

also ich würde das Zusammenrechnen dann doch lieber in PHP realisieren ..

wenn es denn absolut über die Datenbank sein soll .. Mach 2 getrennte Abfragen ..

eine berechnet SUM und COUNT jeweils für eine der beiden beteiligten Tabellen ..

dann muss dein PHP-Script - oder was auch immer du nimmst ja nur noch die beiden SUM und COUNT werte aus beiden Abfragen addieren.

Code:
SELECT user.name, user.right_id, 
SUM(group_bet.points) AS sumPoints_1, COUNT(group_bet.bet_id) AS bets_1
FROM user 
LEFT JOIN group_bet 
ON group_bet.user_id = user.user_id
group by user.user_id
order by sumPoints_1 desc, bets_1 desc
und das ganze Analog für die Final_bets Tabelle

wobei .. es könnte einfacher sein, wenn du das vorher noch auf jeweils 1 User beschränkst ...

und wenn es denn in einer Abfrage sein soll .. du kannst mittels SUM und COUNT eigentlich immer nur die Werte einer Spalte behandeln - du müsstest also ein weiteres SUM(final_bets.points) AS sumPoints_2 und ein COUNT für die Final_Bets Tabelle da reinbauen -

die Ergebnisse müsstest du auch in der Abfrage auch direkt schon addieren dürfen mit SUM(x)+SUM(y) .. und ebenso bei den COUNTS
__________________

Wer LESEN kann, ist klar im Vorteil!

Geändert von eagle275 (27-06-2010 um 18:04 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 27-06-2010, 18:44
Cappo
 Registrierter Benutzer
Links : Onlinestatus : Cappo ist offline
Registriert seit: Aug 2009
Beiträge: 43
Cappo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von eagle275 Beitrag anzeigen
also ich würde das Zusammenrechnen dann doch lieber in PHP realisieren ..

wenn es denn absolut über die Datenbank sein soll .. Mach 2 getrennte Abfragen ..

eine berechnet SUM und COUNT jeweils für eine der beiden beteiligten Tabellen ..

dann muss dein PHP-Script - oder was auch immer du nimmst ja nur noch die beiden SUM und COUNT werte aus beiden Abfragen addieren.

Code:
SELECT user.name, user.right_id, 
SUM(group_bet.points) AS sumPoints_1, COUNT(group_bet.bet_id) AS bets_1
FROM user 
LEFT JOIN group_bet 
ON group_bet.user_id = user.user_id
group by user.user_id
order by sumPoints_1 desc, bets_1 desc
und das ganze Analog für die Final_bets Tabelle

wobei .. es könnte einfacher sein, wenn du das vorher noch auf jeweils 1 User beschränkst ...

und wenn es denn in einer Abfrage sein soll .. du kannst mittels SUM und COUNT eigentlich immer nur die Werte einer Spalte behandeln - du müsstest also ein weiteres SUM(final_bets.points) AS sumPoints_2 und ein COUNT für die Final_Bets Tabelle da reinbauen -

die Ergebnisse müsstest du auch in der Abfrage auch direkt schon addieren dürfen mit SUM(x)+SUM(y) .. und ebenso bei den COUNTS
Also ich finde es besser wenn ich alles per DB Abfrage handlen kann da ich sonst das mehrdimensionale Array sortieren muss... ich habe nun folgende Abfrage mal probiert (wie du gesagt hast):

Code:
SELECT user.name, user.right_id, SUM(group_bet.points) 
+ SUM(final_bet.points), COUNT(group_bet.bet_id) + COUNT(final_bet.bet_id)
FROM user 
LEFT JOIN group_bet
ON group_bet.user_id = user.user_id
LEFT JOIN final_bet
ON final_bet.user_id = user.user_id
GROUP BY user.user_id
das Ergebnis sieht wiefolgt aus:



Das kann nie sein...der zweite User von oben müsste 55 Punkte und 56 Tipps haben...

Auch wenn ich zwei SUMs seperat mache kommt auch nicht das richtige Ergebnis raus:

Code:
SELECT user.name, user.right_id, SUM(group_bet.points) as sumGroupPoints, 
SUM(final_bet.points) AS sumFinalPoints, COUNT(group_bet.bet_id) AS groupBets, 
COUNT(final_bet.bet_id) as finalBets
FROM user 
LEFT JOIN group_bet
ON group_bet.user_id = user.user_id
LEFT JOIN final_bet
ON final_bet.user_id = user.user_id
GROUP BY user.user_id
Und hier die komischen Ergebnisse:



MfG
David

Geändert von Cappo (27-06-2010 um 19:22 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 27-06-2010, 18:54
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Code umbrechen bitte!
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[gelöst] mehrere count´s aus 2 tabellen mojorisin_de SQL / Datenbanken 3 19-09-2009 12:38
Mehrere Datensätze als Ergebnis trotz Count fightwithxml SQL / Datenbanken 3 04-02-2009 13:44
MySQL: tabelle: mehrere count über mehrere spalten... holly123 SQL / Datenbanken 6 11-09-2007 12:52
mehrfacher count in for schleife addieren... israelsson PHP Developer Forum 8 03-02-2005 15:20
Mehrere COUNT`s in einem query? ^EckSteiN^ PHP Developer Forum 6 27-02-2002 08:23

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:55 Uhr.