Frage zu SQL-Abfrage
Christian
- datenbank
0 Gi7mo!0 Christian0 Gi7mo!0 Daniela Koller0 Christian0 Andreas-Lindig0 Klaus Mock0 Tom
Hi,
hab ne Frage zu PHP/MySQL:
Ich möchte folgende Abfrage in meiner Datenbank vornehmen:
Es sollen 10 zufällige User ausgegeben werden, bei denen in einem ganz bestimmten Datenbankfeld (z.B. Ort) etwas eingetragen ist.
Hab das soweit fertig, 10 zufällige User werden ausgegeben, leider weiis ich nicht wie ich mit der WHERE-Klausel (geht das damit) die Anfrage dahingehend einschränken kann, dass nur die Einträge in der Datenbank berücksichtgt werden, die in diesem Feld überhaupt einen Eintrag vorgenommen haben (da dieser freiwillig ist)
Hoffe ich habe mich einigermaßen verständlich ausgedrückt und jemand kann mir helfen. Vielen Dank schon mal im Voraus.
Gruß
Christian
Hab das soweit fertig, 10 zufällige User werden ausgegeben, leider weiis ich nicht wie ich mit der WHERE-Klausel (geht das damit) die Anfrage dahingehend einschränken kann, dass nur die Einträge in der Datenbank berücksichtgt werden, die in diesem Feld überhaupt einen Eintrag vorgenommen haben (da dieser freiwillig ist)
ja, das geht "where ORT != ''"
ja, das geht "where ORT != ''"
vielenb dank für deine schnelle antwort, das hatte ich schon vermutet und auch probiert, allerdings scheint das nicht ganz zu funktionieren, in der auswahl sind immer noch user dabei, die in diesem feld in der db keinen eintrag haben ...
ne ahnung woran das liegen könnte?
danke und gruß
hast du den standard wert als NULL deklariert ?!?
Hi Christian, Gi7mno!
hast du den standard wert als NULL deklariert ?!?
Den braucht man nicht speziell als NULL zu definieren, solange man nichts anderes definiert, ist der NULL.
Korrekt wäre gewesen:
WHERE ORT IS NOT NULL
falls aber auch noch Leerstrings reingekommen sein könnte die auch unerwünscht sind, zusätzlich noch die Abfrage auf ''.
Gruss Daniela
Korrekt wäre gewesen:
WHERE ORT IS NOT NULL
auch das scheint das System nicht zu beeindrucken, es werden immer Datensätze ausgegeben, auf das das nicht zuftrifft ...
anbei der Code:
for ($i=0; $i<10; $i++)
{
$result = mysql_query("select * from $prefix"._users." WHERE user_aim IS NOT NULL AND user_aim != '' ORDER BY uname DESC");
$numrows = mysql_num_rows($result);
if ($numrows == 1) {
$random = 1;
} else {
srand((double)microtime()*1000000);
$random = rand(1,$numrows);
}
$result2 = mysql_query("select * from $prefix"._users." where uid='$random' ORDER BY uname DESC");
$array = mysql_fetch_array($result2);
echo "<a href="user.php?op=userinfo&uname=$array[uname]">$array[uname]</a><br>$array[user_aim]<br>$array[user_yim]<br>$array[user_msnm]</a><br><br>";
}
Hallo Christian,
$result = mysql_query("select * from $prefix"._users." WHERE user_aim IS NOT NULL AND user_aim != '' ORDER BY uname DESC");
hast Du Dir das denn mal als Klartext ausgeben lassen und überprüft? Mit Deinen Variablen kann man wenig anfangen.
was steht in den unerwünschten Datensätzen in der entsprechenden Spalte denn drin - vielleicht ein Leerzeichen?
Gruß, Andreas
Hallo,
$result = mysql_query("select * from $prefix"._users." WHERE user_aim IS NOT NULL AND user_aim != '' ORDER BY uname DESC");
Warum werden alle Daten abgefragt, wenn dich das gar nicht interessiert? Für solche Arten der Abfrage kennt SQL Aggregat-Funktionen wie COUNT().
$result2 = mysql_query("select * from $prefix"._users." where uid='$random' ORDER BY uname DESC");
D.h bedeutet für mich, dass eine spezielle User-ID dich überhaupt nicht interessiert, da Du ja immer irgendwelche zufälligen User aussuchst. imho gehört die zusätzliche Bedingung in dieses Statement und nicht in obiges.
Ach ja, (ohne mich jetzt bei MySQL wirklich auszukennen) gibt es nicht da nicht so etwas wie ORDER BY RANDOM(), oder so ähnlich. Ich würde an Diener Stelle einmal das Handbuchg konsultieren.
Grüße
Klaus
Hello,
$result = mysql_query("select * from $prefix"._users." WHERE user_aim IS NOT NULL AND trim(user_aim= != '' ORDER BY uname DESC");
So wird es besser gehen. Ein Leerstring ist ja nicht das Gleiche, wie ein String mit Leerzeichen. Und wenn Du als Datentyp char(10) genommen hast, dann hast Du einen String der definierten Länge 10, der notfalls mit Leerzeichnen aufgefüllt wurde.
Beim Typ varc() wäre das anders. Der wird automatisch getrimmt.
alternativ kann man auch "...where length(trim(user_aim))>0..." nutzen. Die Länge eines NULL-Feldes ist 0.
Grüße
Tom