Patrick: Daten einzeln auslesen

Hallo zusammen!

Mit dem nachstehenden Code mache ich eine Datenbankabfrage:

$AllPrices = "SELECT item_q,
MAX(item_price) AS Maximum,
MIN(item_price) AS Minimum,
AVG(item_price) AS Durchschnitt,
COUNT(*) AS countQ
FROM table_data
WHERE item_code = 'TF-3'
GROUP BY item_q";

Mit dem Code

$res = mysql_query($AllPrices) or die("Fehler ".mysql_error());

while ($RowPrices = mysql_fetch_array($res)) {
    printf("Q = %s Min = %f, Max = %f, Durchschn. = %f, Menge = %d\n",
                    $RowPrices['item_q'], $RowPrices['Minimum'], $RowPrices['Maximum'],
                    $RowPrices['Durchschnitt'], $RowPrices['countQ']);
}

wird mir je für jeden gefundenen Wert aus item_q
eine Zeile mit allen dazugehörigen Werten ausgegeben.

Nun möchte ich die Daten einzeln verteilen, also nicht als Zeile ausgeben.
Zum Beispiel Höchster Wert von X (aus item_q), dann tiefster Wert von Y (aus item_q), dann Durchschnitt von Z (aus item_q) usw.

Ist es möglich alle Werte von X, Y und Z einzeln anzusteuern, so dass ich sie dann z.B. mit $MaximumX, $MinimumY etc. an beliebigen Orten anzeigen kann?

Vielen Dank & Grüsse
Patrick

  1. Hallo Patrick,

    [lang=php]
    $AllPrices = "SELECT item_q,
    MAX(item_price) AS Maximum,
    MIN(item_price) AS Minimum,
    AVG(item_price) AS Durchschnitt,
    COUNT(*) AS countQ
    FROM table_data
    WHERE item_code = 'TF-3'
    GROUP BY item_q";
    //...
    while ($RowPrices = mysql_fetch_array($res)) {
        printf("Q = %s Min = %f, Max = %f, Durchschn. = %f, Menge = %d\n",
                        $RowPrices['item_q'], $RowPrices['Minimum'], $RowPrices['Maximum'],
                        $RowPrices['Durchschnitt'], $RowPrices['countQ']);
    }
    [/lang]

    Nun möchte ich die Daten einzeln verteilen, also nicht als Zeile ausgeben.
    Zum Beispiel Höchster Wert von X (aus item_q), dann tiefster Wert von Y (aus item_q), dann Durchschnitt von Z (aus item_q) usw.

    na dann musst du deine Daten halt in einem zusätzlichen Array der gewünschten Struktur nach speichern.

    Ist es möglich alle Werte von X, Y und Z einzeln anzusteuern, so dass ich sie dann z.B. mit $MaximumX, $MinimumY etc. an beliebigen Orten anzeigen kann?

    Am sinnvollsten und effektivsten sind drei Datenbankanfragen, in denen du halt nur die jeweiligen Felder selectest. Dann hast du auch gleich schon drei Ergebnisarrays und brauchst sie nicht, wie oben beschrieben, manuell erstellen (was sinnlose Speicher und CPU-Verschwendung ist, da ähnliches ja bereits beim SQL-Server passiert)

    Grüße,

    sven

    --
    ich hatte mal meterlange signs, die sind alle weg
    1. Am sinnvollsten und effektivsten sind drei Datenbankanfragen, in denen du halt nur die jeweiligen Felder selectest. Dann hast du auch gleich schon drei Ergebnisarrays und brauchst sie nicht, wie oben beschrieben, manuell erstellen (was sinnlose Speicher und CPU-Verschwendung ist, da ähnliches ja bereits beim SQL-Server passiert)

      Hi Sven und vielen Dank für die Info!

      Ursprünglich hatte ich auch drei Abfragen und das funktionierte tipp topp. Ich wollte dann die Anzahl der Queries verringern, deshalb meine Frage. Also Deiner Antwort nach sind bezüglich Performance drei Abfragen besser als eine mit einem zusätzlichen Array?

      Patrick

    2. Hallo

      Zum Beispiel Höchster Wert von X (aus item_q), dann tiefster Wert von Y (aus item_q), dann Durchschnitt von Z (aus item_q) usw.

      na dann musst du deine Daten halt in einem zusätzlichen Array der gewünschten Struktur nach speichern.

      Ist es möglich alle Werte von X, Y und Z einzeln anzusteuern, so dass ich sie dann z.B. mit $MaximumX, $MinimumY etc. an beliebigen Orten anzeigen kann?

      Am sinnvollsten und effektivsten sind drei Datenbankanfragen, in denen du halt nur die jeweiligen Felder selectest.

      Datenbankabfragen sind teuer. Sehr teuer. Die Anzahl zu reduzieren ist eine gute Idee.

      Dann hast du auch gleich schon drei Ergebnisarrays und brauchst sie nicht, wie oben beschrieben, manuell erstellen (was sinnlose Speicher

      wieso. Gebe das DB-Ergebnis nach Umschreiben in das zweidimensionale assoziative Array wieder frei.

      und CPU-Verschwendung ist, da ähnliches ja bereits beim SQL-Server passiert)

      Ja, Dein Vorschlag verschwendet unnötig CPU beim Datenbankserver. Der macht das gleiche (kaum optimierbar) dreimal statt einmal in einem Aufwasch. Dazu noch dreimal der Overhead der Abfrage. Nein, das ist wahrscheinlich weder sinnvoll noch effektiv und auch nicht performant. Dein erster Hinweis war viel besser:

      Umschreiben der Daten in ein zweidimensionales Array mit Einträgen wie

      ~~~php $eintrag['X']['Max'],
          $eintrag['X']['Min'],
          $eintrag['X']['Avg'], ...

        
      Damit läßt sich bequem auf die einzelnen Einträge zugreifen (ja, ja: $eintrag ist nicht gerade der geeignete Variablenname).  
        
      Freundliche Grüße  
        
      Vinzenz
      
      1. Umschreiben der Daten in ein zweidimensionales Array mit Einträgen wie

        ~~~php

        $eintrag['X']['Max'],

        $eintrag['X']['Min'],
            $eintrag['X']['Avg'], ...

        
        >   
        > Damit läßt sich bequem auf die einzelnen Einträge zugreifen (ja, ja: $eintrag ist nicht gerade der geeignete Variablenname).  
          
        Diese Lösung wäre super. Leider weiss ich nicht genau wie ich das bewerkstelligen muss, damit es funktioniert. In Sachen PHP bin ich noch ziemlich neu. :-(  
          
        Hätte mir ev. jemand ein Beispiel wo ich dann z.B. mit $maxpriceA, $durchschnittA etc. die gewünschten Werte anzeigen kann?  
          
        Vielen Dank und Grüsse  
        Patrick