tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
606
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    NetBull NetBull ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Ort
    Hürth
    Beiträge
    69
    Hi Leute,

    habe folgendes Problem und glaube das man das sicher mit mySQL lösen kann. Weis aber nicht wie.

    Folgende Abfrage:
    SELECT system, error, COUNT (error) FROM errTab where test_id = 16
    GROUP BY error, system

    Ergibt diese Tabelle
    system error count(error)
    ------ ----- ------------
    WINXP #1 156
    WINXP #2 35
    WINXP #3 65
    WINXP #4 122
    Vista #1 117
    Vista #2 45
    Vista #3 36
    Vista #4 87
    WIN7 #1 61
    WIN7 #2 19
    WIN7 #3 51
    WIN7 #4 78


    nun möchte ich das ergebnis aber so haben:
    system ERR #1 ERR #2 ERR #3 ERR #4 ERR ALL
    ------ ----- ----- ----- ----- ------------
    WINXP 156 35 65 122 378
    Vista 117 45 36 87 285
    WIN7 61 19 51 78 209

    Geht das direkt in mySQL oder nur über den Umweg einer Programmiersprache (Aktuell mach ich das in PHP)

    LG NetBu||
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Kreuztabellen gehen nur klar definiert in Kombination von SUM() und IF()
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    SELECT 
        system, 
        SUM(IF(error='#1', 1, 0)) AS `err #1`,
        SUM(IF(error='#2', 1, 0)) AS `err #2`,
        SUM(IF(error='#3', 1, 0)) AS `err #3`,
        SUM(IF(error='#4', 1, 0)) AS `err #4`,
        COUNT (error) AS `err all`
    FROM 
        errTab 
    WHERE 
        test_id = 16
    GROUP BY
        system;
    NetBull bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    NetBull NetBull ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Ort
    Hürth
    Beiträge
    69
    OK, das is cool. aber in dem Fall muss ich jeden Error definieren. Wenn also ein neuer Error-Eintrag hinzukommt, müsste ich das Query anpassen. Geht das auch dynamisch, das wenn neue Fehlertypen hinzukommen die nicht jedesmal in den queries angepasst werden müssen?
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Du kannst in PHP die Errors analysieren und dann das SQL entsprechend zusammensetzen

    PHP-Code:
    $sql "SELECT DISTINCT error FROM errTab ORDER BY error";
    $result mysql_query($sql);
    while(
    $row mysql_fetch_assoc($result)){
        
    $fields[] = "SUM(IF(error='{$row['error']}', 1, 0)) AS `err #{$row['error']}`, ";
    }
    $errFiields implode(''$fields);
    $sql "
    SELECT 
        system, 
        
    {$errFields}
        COUNT (error) AS `err all`
    FROM 
        errTab 
    WHERE 
        test_id = 16
    GROUP BY
        system;" 
    NetBull bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    NetBull NetBull ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Ort
    Hürth
    Beiträge
    69
    danke Dir...
    wenn ich nun so was will:

    error 1 |error 2
    OS | date | time | count |date time count
    win xp |

    Also das die Auswertungen darstellerisch je nach Fehler in einer anderen Spalte stehen.
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    ich versteh nicht, was du willst
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    NetBull NetBull ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Ort
    Hürth
    Beiträge
    69
    OK, habe es mit Deiner Lösung und zusätzlich einer Schleife in PHP gelöst...
     

  8. #8
    NetBull NetBull ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Ort
    Hürth
    Beiträge
    69
    Problem steht immer noch, da ich immer wieder auf diese Problem stosse.
    Ich versuche das mal anhand von Beispielen zu erläutern. Vielleicht hat jemand eine coole Lösung die mir noch nicht in den Sinn gekommen ist. Natürlich könnte ich das mit PHP Schleifen lösen. Aber mit mySQL direkt als Query wäre es eleganter.

    Die Tabelle sieht so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    id  name    typ     tag wert1   wert2
    --------------------------------------
    01  name01  typ1    1   11      21
    02  name01  typ2    1   12      22
    03  name02  typ1    1   13      23
    04  name02  typ2    1   14      24
    05  name03  typ1    1   15      25
    06  name03  typ2    1   16      26
    07  name04  typ1    1   17      27
    08  name04  typ2    1   18      28
    09  name05  typ1    1   19      29
    10  name05  typ2    1   20      30
    11  name01  typ1    2   21      31
    12  name01  typ2    2   22      32
    13  name01  typ3    2   23      33
    14  name02  typ1    2   24      34
    15  name02  typ2    2   25      35
    16  name02  typ3    2   26      36
    17  name03  typ1    2   27      37
    18  name03  typ2    2   28      38
    19  name03  typ3    2   29      39
    20  name04  typ1    2   30      40
    21  name04  typ2    2   31      41
    20  name04  typ3    2   32      42
    20  name05  typ1    2   33      43
    20  name05  typ2    2   34      44
    20  name05  typ3    2   35      45

    wen ich nun nach Tag 1 abfrage dann soll das Ergebnis so aussehen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    für tag 1
    .           typ1            typ2
    name01      wert1   wert2   wert1   wert2
    ------------------------------------------
    name01      11      21      12      22
    name02      13      23      14      24
    name03      15      25      16      26
    name04      17      27      18      28
    name05      19      29      20      30

    wenn ich aber nach tag 2 abfrage dann soll es so aussehen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    für tag 2
    .           typ1            typ2            typ2
    name01      wert1   wert2   wert1   wert2   wert1   wert2
    -----------------------------------------------------------
    name01      21      31      22      32      23      33
    name02      24      34      25      35      26      36
    name03      27      37      28      38      29      39
    name04      30      40      31      41      32      42
    name05      33      43      34      44      35      45

    Kann man das direkt in mySQL lösen oder muss ich zwingend mit einem Schleifenkonstrukt arbeiten. Das Problem ist das es sich hier um riesige Tabellen handelt....

    cu s00n
    NetBu||
     

  9. #9
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von Yaslaw Beitrag anzeigen
    Kreuztabellen gehen nur klar definiert in Kombination von SUM() und IF()
    Sorry, dabei bleibt es. MySQL kennt keine Pivot/Kreuztabellen. Die Feldanzahl flexibel festlegen geht nur von Ausserhalb.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  10. #10
    NetBull NetBull ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Ort
    Hürth
    Beiträge
    69
    das hab ich fast befürchtet, danke für den Hinweis.
     

  11. #11
    dotti dotti ist offline Mitglied Bronze
    Registriert seit
    May 2005
    Beiträge
    35
    Hallo Forum,

    Ich hatte mal irgend wo eine MySQL funktion gefunden, die eine Pivot Tabelle dynamisch erzeugen kann. Leider dinde ich die nicht mehr und brauche genau das jetzt auch.

    mfg

    Klaus
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Gibt es meines Wissens nach nicht. Nicht dynamisch oder nicht rein in MySQL
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 07.12.10, 10:00
  2. Ergebnisse einer SQL Query Zeilen anstatt Spaltenweise ausgeben
    Von IR-Bastian im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 15.08.07, 14:14
  3. [MySql] Exists in Where-Klause - komplexe Abfrage
    Von Subwoover im Forum Relationale Datenbanksysteme
    Antworten: 9
    Letzter Beitrag: 16.10.06, 14:31
  4. Komplexe Abfrage aus mehreren Tabellen (MySQL 5.0)
    Von Kipperlenny im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 04.08.06, 01:23
  5. Antworten: 5
    Letzter Beitrag: 23.03.04, 13:22