php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.07.2005, 04:33  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard Richtig gruppieren

Hallo,

ich habe eine Tabelle, in welcher wöchentlich "Gewinner" eingetragen werden. Mit der Zeit sind dort dann auch mehrmals die gleichen Gewinner drin, weil sie eben öfter wie 1x gewannen.

Sieht dann z.b. so aus:
Code:
+----+--------+----------+------------+--------+
| id | tipper | spieltag | anz_tipper | gewinn |
+----+--------+----------+------------+--------+
|  1 | Test   |        1 |         10 |   5.00 |
|  2 | Test2  |        1 |         10 |   5.00 |
|  3 | Test3  |        1 |         10 |   5.00 |
|  4 | Test2  |        2 |         10 |   7.50 |
|  5 | Test3  |        2 |         10 |   7.50 |
+----+--------+----------+------------+--------+
Mit welchem select kann ich nun die Gewinner richtig zusammenaddiert (nach Tipper) ausgeben?

Sollte dann in der Ausgabe ungefähr so aussehen:
(Spalten: Platzierung, Tipper, Anzahl Wochensiege, gew. Spieltag (Anz. Tipper insg.), Gewinn)
Code:
1. Test2    2    1 (10), 2 (10)    12.50
   Test3    2    1 (10), 2 (10)    12.50
3. Test     1    1 (10)             5.00
Danke
Heart ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.07.2005, 08:28  
Gast
 
Beiträge: n/a
Standard

Ansätze??

Tipp: SUM(), DISCTINCT bzw GROUP BY
  Mit Zitat antworten
Alt 04.07.2005, 09:48  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Momentan bin ich soweit
Code:
select tipper,count(spieltag) as wochensiege,anz_tipper,sum(gewinn) as gewinn from tippliga_wochengewinner group by tipper order by gewinn desc;
+--------+-------------+------------+--------+
| tipper | wochensiege | anz_tipper | gewinn |
+--------+-------------+------------+--------+
| Test2  |           2 |         10 |  12.50 |
| Test3  |           2 |         10 |  12.50 |
| Test   |           1 |         10 |   5.00 |
+--------+-------------+------------+--------+
Was ich also noch nicht hinbekomme ist die Spalte, in der die Spieltage und in Klammer immer daneben die anz_tipper dieses Spieltags steht
Heart ist offline   Mit Zitat antworten
Alt 04.07.2005, 16:56  
Gast
 
Beiträge: n/a
Standard

ich verstehe nicht ganz, wie das gewünschte ergebniss sein soll...
verstehe ich nicht ganz...

@Wochensiege:
gewonnen ( von maximal ) ?

@anztipper:
eigene tipper ( insgesamte tipper ) ?

Erklärs doch mal ausführlicher... Vielleicht hilft dir abr auch einfach nru CONCACT()
  Mit Zitat antworten
Alt 04.07.2005, 17:07  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

...genau mit CONCAT habe die Ausgabe an sich so hinbekommen, wie gewünscht.

Ich lasse jetzt aber nicht ALLES auf einmal ausgeben, sondern teile es quasi auf.

1. Abfrage holt mir aufsummiert

Code:
Tipper    Anzahl Wochensiege     Gewinn
den Tippern hinterlege ich einen Verweis zu den Details (per get ...?tipper=Tipper3 z.b.)

Also dann

2. Abfrage (per where tipper = '....' <- so ist es einfacher :wink: )

Code:
Tipper    Anzahl Wochensiege     Spieltag      Anzahl der Tipper insg. bei diesem Spieltag       Gewinn
("Anzahl der Tipper insg. bei diesem Spieltag" weil diese Anzahl * 0.50 multipliziert den Gewinn ergibt...)

So ist es jetzt denke ich eine zufriedenstellende Lösung....

DANKE
Heart ist offline   Mit Zitat antworten
Alt 04.07.2005, 17:16  
Gast
 
Beiträge: n/a
Standard

Ist aber schlecht! Wegen Perfomance!

Code:
SELECT 
       a.tipper,a.count(spieltag) as wochensiege,
       a.anz_tipper,a.sum(gewinn) as gewinn,
 { hier dein anderer code von der zweiten abfrage zwischen SELECT und FROM }
 
FROM
         tippliga_wochengewinner a
INNER JOIN 
         tippliga_wochengewinner b ON 
         a.tipper = b.tipper
GROUP BY
        a.tipper 
ORDER BY 
       a.gewinn DESC;

btw: poste doch mal die 2. abfrage
  Mit Zitat antworten
Alt 04.07.2005, 17:52  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Ausgangslage der db ist jetzt z.b.
Code:
+--------+----------+------------+--------+
| tipper | spieltag | anz_tipper | gewinn |
+--------+----------+------------+--------+
| Test   |        1 |          3 |   7.75 |
| Test2  |        1 |          3 |   7.75 |
| Test   |        2 |          3 |   7.75 |
| bla    |        2 |          3 |   7.75 |
+--------+----------+------------+--------+
Deine Abfrage (in deiner select war ein Fehler drin *g*) macht dann das hier daraus
Code:
select a.tipper,count(a.spieltag) as wochensiege,a.anz_tipper,sum(a.gewinn) as gewinn from tippliga_wochengewinner a inner join tippliga_wochengewinner b on a.tipper = b.tipper group by a.tipper order by gewinn desc;

+--------+-------------+------------+--------+
| tipper | wochensiege | anz_tipper | gewinn |
+--------+-------------+------------+--------+
| Test   |           4 |          3 |  31.00 |
| bla    |           1 |          3 |   7.75 |
| Test2  |           1 |          3 |   7.75 |
+--------+-------------+------------+--------+
Test wird also irgendwie doppelt gezählt!?

Und Problem ist eben, wie ich hier noch AUFGELISTET die Spieltage und dann eben die anz_tipper zu jedem Spieltag mit rein bekomme. Sah hierfür keine Möglichkeit, daher mache ich es jetzt eben mit zwei Ausgaben, die so aussehen

1. Für die Gesamtübersicht
Code:
SELECT
      id,tipper,count(spieltag) as wochensiege,
      anz_tipper,sum(gewinn) as gewinn
FROM 
      tippliga_wochengewinner
GROUP BY
      tipper
ORDER BY
      gewinn desc;
2. Für die Details, wenn man auf den Tippernamen klickt
Code:
SELECT
      ID,TIPPER, SAISON,SPIELTAG,ANZ_TIPPER,
      sum(gewinn) as gewinn
FROM
      tippliga_wochengewinner
WHERE
      TIPPER = '$tipper'
GROUP BY
      TIPPER,SPIELTAG
ORDER BY 
      SPIELTAG DESC;
Heart ist offline   Mit Zitat antworten
Alt 04.07.2005, 18:07  
Gast
 
Beiträge: n/a
Standard

Darf man dein DUMP sehen? Die DB-Struktur deiner Tabelle?
Was soll der Output aussehen? Kann man das irgendwo online sehen?
Kannst das in HTML tabellarisch darstellen ODER die spalten der tabelle aufzählen? Klingt alles viel komplizierter als es ist.. aber ohne DB-Design kann man nicht viel dazu sagen... !
  Mit Zitat antworten
Alt 04.07.2005, 18:31  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

DB sieht folgendermaßen (mit dem Bsp. von eben aus)
Code:
CREATE TABLE `tippliga_wochengewinner` (
  `ID` int(13) NOT NULL auto_increment,
  `TIPPER` varchar(30) NOT NULL default '',
  `SPIELTAG` int(2) NOT NULL default '0',
  `ANZ_TIPPER` int(3) NOT NULL default '0',
  `GEWINN` decimal(10,2) NOT NULL default '0.00',
  `SAISON` varchar(9) NOT NULL default '',
  `EINGETRAGEN` datetime NOT NULL default '0000-00-00 00:00:00',
  `DURCH` varchar(30) NOT NULL default '',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;


INSERT INTO `tippliga_wochengewinner` VALUES (1, 'Test', 1, 3, 7.75, '2005-2006', '2005-07-04 17:34:43', 'Heart');
INSERT INTO `tippliga_wochengewinner` VALUES (2, 'Test2', 1, 3, 7.75, '2005-2006', '2005-07-04 17:34:43', 'Heart');
INSERT INTO `tippliga_wochengewinner` VALUES (3, 'Test', 2, 3, 7.75, '2005-2006', '2005-07-04 17:35:12', 'Heart');
INSERT INTO `tippliga_wochengewinner` VALUES (4, 'bla', 2, 3, 7.75, '2005-2006', '2005-07-04 17:35:12', 'Heart');
Zu sehen "wäre" es dann auf http://tippliga.h-trader.de (aber hier sind natürlich momentan diese Testwerte nicht in der DB, so dass nur eine "nichts vorhanden" Meldung mom. kommt....

Hab mal zwei Screenshots gemacht, so wie es mit meinen Testdaten und meinem zuvor geposteten SELECT's mom. aussieht (Tabellendesign/-farbe passt natürlich noch nicht...)

Geamtauflistung:


Details von einem Tipper:
Heart ist offline   Mit Zitat antworten
Alt 04.07.2005, 19:40  
Gast
 
Beiträge: n/a
Standard

Sorry, aber das geht mit der Stuktur nicht alles in einer Query. Außerdem musst du dich entscheiden, ob du nach spieler oder spieltage gehst!

Die Struktur ist schlecht gemacht... du wist nicht um 2 herum kommen:

1. ( Wochengewinner)

Code:
   SELECT
        a.id,
        a.tipper,
        COUNT(a.tipper) AS tippwochensiege_insg,
        SUM(a.gewinn) AS gewinn_insgesamt
   FROM
        tippliga_wochengewinner a
   GROUP BY
        a.tipper
   ORDER BY
        gewinn_insgesamt DESC
2. Usergewinn gruppiert nach Spieltage :

Code:
    SELECT
        a.spieltag,
        a.tipper,
        anz_tipper,
        SUM(a.gewinn) AS gewinn
    FROM
         tippliga_wochengewinner a
    WHERE
         a.tipper = 'test'
    GROUP BY
         a.spieltag
Tu dir einen gefallen, und beschäfftige dich mit Normalisierung
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP richtig lernen! TeazY PHP Tipps 2008 5 01.02.2008 21:50
Auflistung erfolgt nicht richtig phyton Datenbanken 4 06.02.2007 17:22
[Erledigt] Modularisierung: Wie macht man es richtig? PHP-Fortgeschrittene 1 12.03.2006 16:00
Formularproblem! leitet nicht richtig weiter! PHP Tipps 2005-2 21 11.10.2005 23:35
[Erledigt] Lieg ich da richtig? Datenbanken 4 31.08.2005 13:21
Select-Abfrage technisch richtig PHP Tipps 2005-2 5 28.07.2005 11:40
Checkboxen richtig auslesen Boennchen PHP Tipps 2005-2 7 21.07.2005 11:57
[Erledigt] VARIABLEN WERDEN NICHT RICHTIG VERARBEITET!!!! HILFE PHP Tipps 2005-2 6 02.07.2005 18:32
PHP funktioniert nicht richtig?! PHP Tipps 2005-2 26 11.06.2005 09:05
Variable wird nicht richtig übergeben PHP Tipps 2005 17 16.01.2005 16:51
Bilder werden nicht richtig angezeigt PHP Tipps 2005 11 07.01.2005 13:16
Statistik funktioiert nicht richtig PHP Tipps 2005 3 01.01.2005 14:16
[Erledigt] imap_body RICHTIG ausgeben (mit allen Sonderzeichen usw.) PHP-Fortgeschrittene 3 08.09.2004 02:33
[Erledigt] Perl richtig installiert oder falsch ? testen aber wie ? c01001 Server, Hosting und Workstations 2 31.08.2004 22:37
Formular, welches prüft, ob eingegebene Antwort richtig.... PHP Tipps 2004 10 15.08.2004 22:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
wie kann man richtig gruppieren, php group by doppelt gruppieren

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.