SQL-Abfragen
Margrith
- php
1 Vinzenz Mai0 Margrith1 Fabian St.1 wahsaga1 Vinzenz Mai
0 Margrith0 dedlfix
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 */
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
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
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.
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
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
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
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.