Einzelne Einträge mit PHP und MYSQL (Distinct)
Phil
- datenbank
0 Vinzenz Mai- php
0 Vinzenz Mai0 Phil0 Vinzenz Mai0 Phil0 Phil1 Vinzenz Mai
Hallo Zusammen,
Stehe irgendwie gerade auf der Leitung.
$sql = "select distinct 'ip' from 'counter' where server='1.1.1.1'";
$ergebnis = mysql_query($sql);
echo $ergebnis;
Irgendwie funktioniert das ganze überhaupt nicht. Die Ausgabe funktioniert nicht. Hat jemand einen Tipp? Vielen Dank und ein schöner Sonntag! Grüsse!
Hallo Phil,
$sql = "select distinct 'ip' from 'counter' where server='1.1.1.1'";
counter scheint ein Spaltenname zu sein.
Spaltennamen dürfen im SQL-Dialekt von MySQL *nicht* in einfache Anführungszeichen eingeschlossen werden. Du kannst
- den Backtick nutzen.
- auf Behandlung verzichten, da der Spaltenname counter nicht behandelt
werden muss.
- ANSI-Quotes einschalten und doppelte Anführungszeichen nutzen.
$ergebnis = mysql_query($sql);
liefert Dir daher einen MySQL-Fehler zurück.
echo $ergebnis;
$ergebnis enthält daher false, wie Du der Doku entnehmen kannst.
Im Erfolgsfall musst Du anschließend die Ergebniszeilen mittels der mysql_fetch-Funktionen wie z.B. mysql_fetch_array() durchlaufen. Ja auch dann, wenn es nur eine einzigen Datensatz mit einer einzigen Spalte gibt.
Noch besser wäre es, wenn Du die zwar wohldokumentierten und in Tausenden Tutorials erläuterten aber genauso veralteten und wenig leistungsfähigen mysql_*-Funktionen überhaupt nicht mehr verwendest und Dich statt dessen zum Beispiel der wesentlich leistungsfähigeren mysqli-Erweiterung von PHP zuwendest.
Freundliche Grüße
Vinzenz
Hallo Ingrid,
$sql = "select distinct 'ip' from 'counter' where server='1.1.1.1'";
counter scheint ein Spaltenname zu sein.
ich vermute außerdem, dass der OP nicht die konstante Zeichenkette
ip
auslesen will, sondern den Inhalt einer Spalte, die den Namen
ip
trägt. Für diese Spalte gelten selbstverständlich ebenfalls die Ausführungen:
Spaltennamen dürfen im SQL-Dialekt von MySQL *nicht* in einfache Anführungszeichen eingeschlossen werden. Du kannst
- den Backtick nutzen.
- auf Behandlung verzichten, da der Spaltenname counter nicht behandelt
werden muss.- ANSI-Quotes einschalten und doppelte Anführungszeichen nutzen.
Freundliche Grüße
Vinzenz
Hallo!
Vielen Dank für deine ausführliche Hilfe! Sehr nett! Wenn ich das alles richtig verstanden habe, müsste das ganze so aussehen?
$sql = "select distinct ip
from counter
where server='1.1.1.1'";
$ergebnis = mysql_query($sql);
$ausgabe = mysql_fetch_array($ergebnis);
echo $ausgabe;
Irgendwie haut das aber noch nicht so hin...
Den Tip mit MYSQLli werde ich mir sicher mal noch genauer ansehen :) Danke!
Hallo,
Vielen Dank für deine ausführliche Hilfe! Sehr nett! Wenn ich das alles richtig verstanden habe, müsste das ganze so aussehen?
$sql = "select distinct
ip
fromcounter
where server='1.1.1.1'";
$ergebnis = mysql_query($sql);
Du solltest hier *immer* überprüfen, ob die Abfrage erfolgreich ausgeführt werden konnte. MySQL-Fehler liefert Dir übrigens mysql_error(). Das häufig zu findende
" or die(mysql_error());"
ist übrigens *keine* Fehlerbehandlung. Wenn etwas schiefgegangen ist, dann gib dem Benutzer eine nette "Tut-mir-leid-geht-im-Moment-nicht-Nachricht" und logge für *Dich* den Fehler in einer Datei, die Du Dir regelmäßig anschaust ....
$ausgabe = mysql_fetch_array($ergebnis);
echo $ausgabe;
mysql_fetch_array liefert, wie der Name es schon vermuten läßt, immer ein Array. Wenn es nur eine Spalte gibt, ein Array mit einem Element. Da Deine Spalte den Namen "ip" trägt, kannst Du über
$ausgabe[0]
oder
$ausgabe['ip']
auf den Inhalt dieser Spalte zugreifen. Diesen Komfort bietet Dir diese Funktion, deren Handbuchseite ich Dir ja bereits verlinkt habe.
Freundliche Grüße
Vinzenz
Danke! Wie immer super Hilfe! Sie sollten Unterricht geben :)
$sql = "select distinct ip
from counter
where server='1.1.1.1'";
$ergebnis = mysql_query($sql);
$ausgabe = mysql_fetch_array($ergebnis);
echo $ausgabe[0];
liefert mir folgende Ausgabe
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/web4/html/admin.php on line 24
Das mit dem Array hätte ich auch selbst merken sollen, sorry!
Es ist mir ein Fehler unterlaufen! Nun klappt alles! Vielen Dank und ein schöner Nachmittag! Grüsse
hallo!
Ich muss mich leider nochmals melde. Ich bin etwas über das Ergebnis meines Codes verwirrt. Mein Ziel war es eigentlich, dass ich alle Einträge der Spalte zählen kann. Dabei wird aber kein Eintrag doppelt gezählt.
Das Resultat meines Scriptes ist jedoch eine IP Adresse und nicht ein Nummer. Wenn ich zusätzlich count verwende, ergibt mein Ergebnis 2 obwohl mindestens 30 verschiedene IP's in der Spalte gespeichert sind. Was übersehe ich? Danke!
Man müsste halt selbst etwas überlegen.
$sql = "select count(distinct(ip)) from counter
where server='1.1.1.1'";
Das wars von mir! Ein schöner Nachmittag! Grüsse!
Hallo,
Danke! Wie immer super Hilfe!
bitte, gerne :-)
Sie sollten Unterricht geben :)
Kein "Sie" bitte. Es soll vorkommen, dass ich von Zeit zu Zeit Deinen Tipp befolge. Zum Glück nicht Vollzeit :-)
$sql = "select distinct
ip
fromcounter
where server='1.1.1.1'";
$ergebnis = mysql_query($sql);
$ausgabe = mysql_fetch_array($ergebnis);
echo $ausgabe[0];liefert mir folgende Ausgabe
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/web4/html/admin.php on line 24
dies bedeutet, dass $ergebnis nicht auf eine gültige Ergebnisressource verweist. Daraus folgt, dass mysql_query nicht erfolgreich war, sondern einen Fehler zurückgeliefert hat (hab' ich Dir schon ans Herz gelegt):
// Stelle die Abfrage zusammen.
// Hinweis: Es ist eine gute Idee, Daten, die sich verändern können
// kontextgemäß zu behandeln. Du hast hier einen SQL-Kontext
// und die dazu passende Funktion heißt [link:http://www.php.net/manual/de/function.mysql-real-escape-string.php@title=mysql_real_escape_string].
// Dabei musst Du noch aufpassen, dass Dir das gut gemeinte PHP-Feature
// [link:http://www.php.net/manual/de/security.magicquotes.php@title=Magic Quotes] keinen Strich durch die Rechnung macht.
// Schau dort nach, wie man diese ausschaltet, falls nötig.
$sql = "select distinct `ip` from `counter` where server='1.1.1.1'";
$ergebnis = mysql_query($sql);
// Überprüfe auf Erfolg
if (!$ergebnis) {
// mysql_query hat FALSE zurückgeliefert
// versorge den Benutzer mit einer tröstenden Meldung
// *Nur für Debugging während der Entwicklung!*
// *NICHT in der Produktionsumgebung verwenden!*
// für Debug-Zwecke, gib den Fehler aus
// Gib das SQL-Statement und die MySQL-Fehlermeldung aus
echo $sql, '<br>', mysql_error();
}
else {
// Erfolg, greife auf die Daten zu
$ausgabe = mysql_fetch_array($ergebnis);
echo $ausgabe['ip'];
}
Freundliche Grüße
Vinzenz