Alle Datensätze mit beliebigem Wert in Spalte auslesen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abfragen
anfrage
ansatz
anzeigen
auslese
auswahl
bedingung
code
dank
datenbank
datensatz
korrektur
spalte
spalten
sternchen
tabelle
treffer
url
zusammensetzen
-
Hallo zusammen,
für meine Datenbank möchte ich eine Funktion schreiben, in der ich verschiedene Werte einer Spalte aus der Datenbank auslesen kann. Darunter soll auch die Option "Alle Werte aus Spalte" zu finden sein. Der zu suchende Wert wird dann über Post und ein Formular an PHP zurückgegeben.
Mit Sternchen * funktioniert es leider nicht :(
So geht's leider nicht :(
$wert='*'; $anfrage=mysql_query("SELECT a,b,c,d FROM tabelle1 WHERE a='$wert' AND b='*' AND c=*");
Gibt es ein Zeichen für beliebigen Inhalt?
Keine Lösung ist, die Abfrage der Spalte mit beliebigen Wert weg zu lassen, da sonst kein spezieller Wert mehr gefiltert werden kann und zusammensetzen will die die Select-Anfrage auch nicht unbedingt.
Das ist keine Alternative:
[/code]$anfrage=mysql_query("SELECT a,b,c,d FROM tabelle1 WHERE b='c'");
Sorry für die Anfängerfrage ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wie wärs so:
$selecta = isset($a) ? 'a = \'' . mysql_real_escape_string($a) . '\'' : '1'; $selectb = isset($b) ? 'b = \'' . mysql_real_escape_string($b) . '\'' : '1'; $selectc = isset($c) ? 'c = \'' . mysql_real_escape_string($c) . '\'' : '1'; $selectd = isset($d) ? 'd = \'' . mysql_real_escape_string($d) . '\'' : '1'; $query = "SELECT a,b,c,d FROM tabelle WHERE $selecta AND $selectb AND $selectc AND $selectd"; echo($query);
Wenn eine der Variablen gesetzt ist wird sie beim SELECT berücksichtigt, sonst nicht. -
wieso nicht die Select-Abrfage zusammensetzen ?!?
Wenn $wert = '*'; dann alles abfragen ... sonst mit Bedingung ...
if ($wert == '*') { $sql = "SELECT a,b,c,d FROM tabelle1"; // alles } else { $sql = "SELECT a,b,c,d FROM tabelle1 WHERE a ='".$wert."' OR b ='".$wert."' OR c ='".$wert."'"; } $abfrage = mysql_query($sql);
und bist Du sicher, dass Du AND als weitere Bedingungen willst,
dann kommen nur Treffer, wenn der gesuchte Wert in allen Spalten gleich ist
und solche Spalten würden keinen Sinn machen, daher wohl eher OR (oder)
also Treffer, wenn in mind. einem der Felder der Wert genau gleich ist
Wenn es sich um Teil-Strings-handelt, die Du Suchen willst, dann geht das mit LIKE
... WHERE a LIKE '%".$wert."%' ...
Info zu LIKE siehe hier: http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html
oder was genau hast Du vor?
-
@hackyourlife:
Danke für den Ansatz, aber sofern "a" leer ist, wird nichts angezeigt.
@sportinfo:
Ich habe mich vllt. falsch ausgedrückt:
Ich will (ähnlich excel) Werte aus der Datenbank filtern, d.h. alle Datensätze anzeigen, die den Wert a in Spalte sa, den Wert b in Spalte sb, den Wert c in Spalte sc und den Wert d in Spalte sd haben.
Dabei gebe ich eine Auswahl über die in den jeweiligen Spalten vorhandenen Werten zur Auswahl. Es soll aber auch möglich sein, auszuwählen, dass alle Werte in Spalte sa oder/und Spalte sb oder/und Spalte sc oder/und Spalte sd angezeigt werden.
Das heißt, ich kann auswählen, welche Datensätze ich anzeigen will, dabei kann aber muss nicht jeder Wert einen bestimmten Wert haben. Es kann auch sein, dass ein, zwei, drei oder alle Spalten mit allen Inhalten ausgegeben werden sollen.
Beispiel:
Zeig mir alle Datensätze an, die den Wert a=1 und d=1 haben. Bei Spalten b und c ist der Wert egal.
Da es hier bei 10 Spalten unzählige Variationsmöglichkeiten gibt, brauche ich sowas wie ein Sternchen (*) in der Abfrage, so ne Art "Wert egal"-Symbol. -
esadat schrieb:
Fehlermeldungen aktiviert? Hast du dir die $query ausgeben lassen und sie stimmt? Ist die Datenbankverbindung schon vor dem Code geöffnet?
@hackyourlife:
Danke für den Ansatz, aber sofern "a" leer ist, wird nichts angezeigt.
Mein Ansatz nimmt die a,b,c,d dann, wenn $a,$b,$c und/oder $d gesetzt sind. -
$code=''; $selecta = isset($code) ? 'code = \'' . mysql_real_escape_string($code) . '\'' : '1'; echo('<a style="position:absolute;top:150px;left:0px;">SELECTA: '.$selecta.'</a>');
ergibt den Wert:
SELECTA:code = ''
Da jedoch kein Datensatz in der Spalte code leer ist, wird nichts angezeigt.
Aber der Ansatz war super!
Versuche das grade mal mit "<>' ' " wenn $code leer ist. Dann werden alle Datensätze angezeigt. Wenn $code nicht leer ist, ist ein bestimmter Datensatz zu finden also "=".
Voll blöd, dass es keinen "egal"-Wert gibt. -
Du hast es schon fast verstanden... ersetz doch
durchisset($code)
und alles funktioniert so wie es soll... also nach der Korrektur wird wenn kein code angegeben wird er auch beim select nicht berücksichtigt.($code != '')
Beitrag zuletzt geändert: 28.6.2012 20:47:12 von hackyourlife -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage