Margrith: SQL-Abfragen

Hallo Forianer!

ich habe eine Tabelle "Muster" mit sagen wir mal 3000 einträge. Nun will ich die Werte der Kolonne "Beispiel" gruppiert nach Inhalt inklusive Mengenangabe (wie oft ein Begriff vorkommt) ausgegeben haben.

Mein Lösungsansatz: Ich mache sooft eine Abfrage auf die Tabelle "Muster" (gruppiert!) bis alle records abgehandelt wurden.

Währenddessen zähle ich dann, mit einer zweiten Abfrage, wie oft die einzelnen Begriffe vorkommen.

Nur: Diese Abfrage läuft nun schon ein paar Minuten. Ich gehe darum davon aus, dass mein Lösungsansatz falsch ist!

Kann mir bitte jemand auf die Sprünge helfen?

Liebe Grüsse
Margrith

-> Hier der Code:

$strQuery  = "SELECT beispiel FROM muster ";
$strQuery .= "GROUP BY beispiel ";
$dbRS = MySQLQuery($strQuery);
$intMaxRows = mysql_num_rows($dbRS);

while($arrRS = mysql_fetch_array($dbRS)) {

include("../db/db_hirn.php3");

MYSQL_QUERY("SELECT COUNT(beispiel) as anz2 FROM muster ");
$dbRS = MySQLQuery($strQuery);
$intMaxRowsNew = mysql_num_rows($dbRS);

echo"$intMaxRowsNew";

} /* end while */

  1. Hallo Margrith

    ich habe eine Tabelle "Muster" mit sagen wir mal 3000 einträge. Nun will ich die Werte der Kolonne "Beispiel" gruppiert nach Inhalt inklusive Mengenangabe (wie oft ein Begriff vorkommt) ausgegeben haben.

    Mein Lösungsansatz: Ich mache sooft eine Abfrage auf die Tabelle "Muster" (gruppiert!) bis alle records abgehandelt wurden.

    Soweit schon mal richtig.

    Währenddessen zähle ich dann, mit einer zweiten Abfrage, wie oft die einzelnen Begriffe vorkommen.

    Da steckt Dein Fehler.

    $strQuery  = "SELECT beispiel FROM muster ";
    $strQuery .= "GROUP BY beispiel ";
    $dbRS = MySQLQuery($strQuery);
    $intMaxRows = mysql_num_rows($dbRS);

      
    SELECT  
      beispiel,  
      COUNT(beispiel) AS anzahl  
    FROM muster  
    GROUP BY beispiel  
    
    

    sollte es tun.

    Freundliche Grüße

    Vinzenz

    1. SELECT
        beispiel,
        COUNT(beispiel) AS anzahl
      FROM muster
      GROUP BY beispiel

      Hallo Vinzenz

      Kleine Frage: für was steht "AS anzahl"? benötige ich diesen
      Wert?

      Kenne mich mit mySQL nicht so gut aus wie Du feststellst!  ;O)

      Grüsse
      Margrith

      1. Hi!

        Kleine Frage: für was steht "AS anzahl"? benötige ich diesen
        Wert?

        Damit legst du einen Alias an. In PHP kann man dann dadurch über $row['anzahl'] auf den entsprechenden Wert zugreifen. Wenn kein Alias verwendet werden würde, müsste man über $row['COUNT(*)'] darauf zugreifen, was natürlich wesentlich umständlicher ist.

        Grüße,
        Fabian St.

      2. hi,

        SELECT
          beispiel,
          COUNT(beispiel) AS anzahl

        Kleine Frage: für was steht "AS anzahl"? benötige ich diesen
        Wert?

        das ist ein sogenannter alias.

        beispiel ist der name einer real existierenden spalte in deiner tabelle - beim ausgeben der daten kannst du diesen benutzen, um auf die werte in dieser spalte zuzugreifen.

        der mit COUNT() ermittelte wert ist aber keine real existierende spalte - also gibt man diesem einen aliasnamen, um anschließend leichter darauf zugreifen zu können.

        SELECT beispiel FROM ...
        heißt: liefere mir die werte aus der spalte beispiel unter dem bezeichner "beispiel".

        SELECT COUNT(beispiel) AS anzahl FROM ...
        heißt: liefere mir die anzahl der vorhandenen beispiele unter dem bezeichner "anzahl".

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      3. Hallo Margrith

          
        
        > > SELECT  
        > >   beispiel,  
        > >   COUNT(beispiel) AS anzahl  
        > > FROM muster  
        > > GROUP BY beispiel  
        
        

        Kleine Frage: für was steht "AS anzahl"?

        Damit gibst Du der zweiten Spalte Deines Ergebnisses einen Namen.

        benötige ich diesen Wert?

        Nicht unbedingt, Du kannst ja auch über die Spaltennummer auf diese Spalte, die Du benötigst zugreifen. Es ist halt netter, wenn Du z.B. nach der Häufigkeit des Auftretens sortierst:

          
        SELECT  
           beispiel,  
           COUNT(beispiel) AS anzahl  
        FROM muster  
        GROUP BY beispiel  
        ORDER BY anzahl DESC  
        
        

        gibt Dir die häufigsten "beispiele" zuerst aus mit Angabe der Häufigkeit.

        Kenne mich mit mySQL nicht so gut aus wie Du feststellst!  ;O)

        Diese SQL-Anweisungen werden von allen mir bekannten SQL-Dialekten verstanden, sogar von MySQL.

        Das MySQL-Handbuch kann Dir bessere Kenntnisse verschaffen. Nutze es! Es gibt auch eine deutsche Version, die ist leider nicht so aktuell wie die englische und manchmal auch etwas kürzer gehalten.

        Freundliche Grüße

        Vinzenz

  2. Würde anstelle von:

    SELECT
      beispiel,
      COUNT(beispiel) AS anzahl
    FROM muster
    GROUP BY beispiel

    auch dies gehen:

    $result_summe=MYSQL_QUERY("SELECT COUNT(beispiel) as anz1 FROM muster"); $obj=mysql_fetch_object($result_summe); $anz1=$obj->anz1;

    Jedoch kriege ich folgende Fehlermeldung:

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

    1. echo $begrüßung;

      $result_summe=MYSQL_QUERY("SELECT COUNT(beispiel) as anz1 FROM muster"); $obj=mysql_fetch_object($result_summe); $anz1=$obj->anz1;

      Jedoch kriege ich folgende Fehlermeldung:

      Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

      mysql_query gibt bei einem Misserfolg false zurück[*]. Werte das aus und fahre nicht einfach blind weiter wenn es gekracht hat, dann entstehen nicht diese Folgefehler wie der obige. Um herauszufinden was genau MySQL nicht gepasst hat, kannst du mit mysql_error() diese MySQL-Fehlermeldung erhalten.

      echo "$verabschiedung $name";

      [*] mysql_connect und noch einige andere Funktionen machen das auch.