SQL Abfrage wenn WHERE id = '1' AND text = 'klamm' nix liefert nehme anderen

chrisi01

Romy lieb haben
ID: 101113
L
26 November 2008
2.854
238
hi

ich hab folgende Abfrage:
PHP:
SELECT test FROM daten WHERE user = '$userget' AND text = 'klamm'
wenn nun das Ergebnis nichts zurückliefert weil $userget nicht in der db steht (kann in diesem fall u.u passieren) will ich das er den Datensatz mit
PHP:
user = 'chrisi01' AND text = 'klamm'
verwendet. Dieser steht fest in der db und ist auf jeden Fall vorhanden.
normalerweise würde ich die ausgabe von test nun mit einem if prüfen und wenn sie leer ist nochmal eine sql abfrage drann hängen eben mit
PHP:
WHERE user = 'chrisi01' AND text = 'klamm'
:mrgreen:
aber ich kann mir vorstellen das dies einfacher geht :)

Vielen dank schonmal für die hilfe

mfg

chris
 
Hä?! :ugly:

(ich hoffe nur, du setzt nicht wirklich einen GET-Parameter in die Abfrage rein 8O)
 
(ich hoffe nur, du setzt nicht wirklich einen GET-Parameter in die Abfrage rein 8O)

nein keine angst soll nur ein beispiel sein

zum hä:

also ich hab in der db daten 3 Spalten:

test | user | text

mit den werten:

1 | chrisi01 | klamm

so nun hab ich folgende abfrage laufen wo $userget = theHacker ist:

PHP:
SELECT test FROM daten WHERE user = '$userget' AND text = 'klamm'

logischerweiße ist der datensatz nicht vorhanden und ich bekomme nichts zurück. In meinem Fall würde ich dann aber gerne die 1 von chrisi01 zurückbekommen. Sollte allerdings der Datensatz

2 | theHacker | klamm

vorhanden sein möchte ich natürlich die 2 erhalten.

hoffe das ist verständlicher

PHP:
$abfrage = "SELECT test FROM daten WHERE user = '$userget' AND text = 'klamm'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
    $test= $row->test;
}
if ($test == "")
{
$abfrage = "SELECT test FROM daten WHERE user = 'chrisi01' AND text = 'klamm'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
    $test= $row->test;
}
}

so hätte ich es gelöst aber es muss ja kürzer gehen ;)

mfg

chris
 
Wenn du nur einen Datensatz zurückerwartest, warum verarbeitest du den Query dann in einer Schleife?:-?

Ich hätts ja so gemacht:

PHP:
$test = mysql_fetch_object(mysql_query("SELECT test FROM daten WHERE user = '$userget' AND text = 'klamm'"));
if (!$test) {
$test = mysql_fetch_object(mysql_query("SELECT test FROM daten WHERE user = 'chrisi01' AND text = 'klamm'"));
}
Mag jetzt vl. nicht so geordnet sein, aber wenn du die Variablen sonst nirgends verwendest :think:
 
macht der Gewohnheit könnte ich mir echt mal abgewöhnen. :ugly:

aber die Frage ist immer noch beantwortet ;) ich werde doch nicht echt den umständlichen weg über 2 Abfragen gehen müssen?

edit: deines ist ja im Prinzip das gleiche wie oben ebenfalls 2 Abfragen. Bekommt man dies nicht in eine rein?

mfg

chris
 
Spontan fiele mir noch ein, einfach mit einem OR die Bedingungen zu verknüpfen und dann mit einer Arrayfunktion (wo mir grad der Name entfallen ist) oder auch in_array zu prüfen, ob der Datensatz vorhanden ist.;)
 
Zuletzt bearbeitet:
array klingt noch schlechter (entfällt mir auch laufend der name) :ugly:

ich mache es dann doch mit 2 abfragen ;)

danke dir

mfg

chris
 
Erklärst du mir mal was du denn als default haben willst, wenn der Query ins Leere läuft, ich hab da noch kein Muster gesehen. Immer den ersten? Feste Werte? Irgendwas?
 
hi

wenn
PHP:
$test = mysql_fetch_object(mysql_query("SELECT test FROM daten WHERE user = '$userget' AND text = 'klamm'"));

ins leere läuft (eben weil $userget = theHacker nicht in der db steht) soll er meinen test Wert hernehmen also immer fest den test-Wert mit user chrisi01. natürlich wird es später noch nen 3. 4. 5. usw. Namen geben der in der db stehen wird und auch abgefragt wird. Sollte nun ein Name nicht vorhanden sein, aber abgefragt werden, soll er immer meinen Test Wert nehmen (der ist auf jeden Fall vorhanden garantiert!). Also genau das gleiche wie der Code von Sebmaster oder mir nur eben mit einer Abfrage. Da dies aber wohl nicht ganz leicht ist mach ich eben 2 Abfragen draus geht ja auch ;) Und so oft wird das auch nicht passieren das ein user abgefragt wir der nicht existiert dann bleibt es ja nur bei einer Abfrage.

Also ganz kurz wenn
PHP:
$test = mysql_fetch_object(mysql_query("SELECT test FROM daten WHERE user = '$userget' AND text = 'klamm'"));
ins leere läuft dann
PHP:
$test = mysql_fetch_object(mysql_query("SELECT test FROM daten WHERE user = 'chrisi01' AND text = 'klamm'")); //also meinen Wert der in test steht.

mfg

Chris
 
Okay, hab ich doch richtig verstanden, dann setz doch einfach den Query und wenn er erfolglos war gib einfach Defaultwerte aus :ugly:
 
PHP:
SELECT test
FROM daten
WHERE user IN ('$userget', 'chrisi01') AND text = 'klamm'
ORDER BY user = '$userget' DESC
LIMIT 1
 
ich würds folgendermaßen machen:

PHP:
SELECT test 
FROM daten 
WHERE (user = '$userget' OR user = 'chrissi01') 
AND text = 'klamm'
und dann halt mit ner if-Abfrage prüfen ob test ungleich deiner Test-ID in diesem Fall also 1 ist, falls nicht hast du halt die Daten von deinem Testuser andernfalls hast du die gesuchte ID.
 
hi

danke euch beiden aber die von tleilax gefällt mir vom aussehen und Verständlichkeit besser. Werde sie mal testen :)

mfg

chris