Dropdown und Suchen

hieger

Grünschnabel
Hallo Profis,

ich hab schon wieder ein Problem und bitte um eure Hilfe:

Es gibt eine Tabelle in meiner Datenbank, welche die Felder:
id_anbieter
aktiv
art
beinhaltet.

Nun möchte ich, da diese Tabelle viele Datensätze beinhaltet, nach diesen Kriterien sortieren bzw. gruppieren. Dazu hab ich jetzt auf meiner Seite 3 Dropdown Felder gemacht und mit den Gruppierwerten gefüllt. Das funktioniert auch super, aber bei der Suche gibt es jetzt Probleme:

PHP:
$result=mysql_query("select * from tarife where id_anbieter LIKE '%$id_anbieter%' AND art LIKE '%$art%' AND aktiv LIKE '%$aktiv%' ORDER by 'id_anbieter' ");

Wenn ich jetzt nur z.b. das DropDown Feld mit der Art 2 möchte kommen trotzdem alle Datensätze. Ich habe auch schon statt LIKE mit art='$art' probiert, aber dann kommen keine Datensätze.

Bitte um Hilfe :)

Liebe Grüße
Markus
 
Hi

like ohne Wildcards (%) und = bringen die eigentlich das gleiche Ergebnis.

Wenn Du über ein Dropdown Werte auswählen lässt, dann sind diese ja als Wert in den den Tabellen vorhanden (denke ich jetzt mal). In dem Falle brauchst Du die Wildcards nicht.

Dann verbindest Du mit AND, das bedeutet, es muss ein Datensatz ausgegeben werden, wo alle Kriterien übereinstimmen müssen.

Es wird dann z.b. nur OTTO Meier Strassburg gefunden und nicht OTTO Meier Münster wenn Strassburg als Stadt ausgewählt wurde.

Willst Du es anders haben, dann solltest Du den Opertor and oder or mit auswählen lassen.
 
Hallo,
zunächst ein paar allg. Überlegungen zu deiner Query:
Code:
select * 
  from tarife 
  where id_anbieter LIKE '%$id_anbieter%' 
    AND art LIKE '%$art%' 
    AND aktiv LIKE '%$aktiv%' 
  ORDER by 'id_anbieter'
Wenn eines der Felder ein Integer ist, solltest du statt LIKE = verwenden und die %-Zeichen weglassen.
Wie Luzie in der Antwort bereits geschrieben hat, solltest du, wenn die Werte nach denen gesucht wird, Werte aus der Tabelle sind, ebenfalls mit = und ohne % suchen.

Wenn ich dich richtig verstanden habe, möchtest du nicht immer in allen 3 Dropdown-Feldern einen Wert auswählen, sondern z. B. nur Art. In diesem Fall musst du die anderen beiden in der Query weglassen. D. h. du musst den Querystring zur Laufzeit zusammenbauen.
Wenn du mit diesen Infos noch nicht ans Ziel kommst, schreib ein paar Datensätze aus deiner Tabelle als Beispiel hierher (ev. mit Datentyp), deine aktuelle Query und was damit nicht funktioniert.
 
Zuletzt bearbeitet:
Hallo,

danke für die Tipps. Es stimmt, dass nicht immer aus allen Feldern ausgewählt werden soll. wie kann ich dann so einen Query zusammen bauen.

Wie ich mir das vorstelle, findet man auf www.handy-tarife.at/tarife1.php

Soll ich vorm Ausführen des Querys einfach überprüfen, welche Kriterien mit übergeben werden oder kann ich so eine Abfrage einfach automatisch erstellen lassen?

Danke
Markus
 
Hallo,
ich vermute, du machst das mit PHP - davon habe ich keine Ahnung. Daher versuch ich es mal mit einer allg. Erklärung, wie du deine Query zusamenbauen kannst:
Code:
Erster = 0
SQLString = 'SELECT * FROM TARIFE WHERE '
Ist $id_anbieter <> '' dann 
  SQLString = SQLString + 'id_anbieter = '$id_anbieter''
  Erster = 1
Ist $art <> '' dann
  Ist Erster = 1 dann
    SQLString = SQLString + 'AND'
  SQLString = SQLString + 'art = '$art''
Ich hoffe, das ist einigermaßen verständlich.
 
Ok, schön langsam komm ich der Sache schon näher!

Es gibt jetzt 3 Dropdownfelder: id_anbieter, art, aktiv

Folgende Abfrage funktioniert schon mit den id_anbieter und art. aber wenn ich aktiv auch noch abfragen möchte komm ich nicht weiter.

PHP:
if($id_anbieter != "blank")
{
$var1="id_anbieter='$id_anbieter'";
}
if($id_art != "blank")
{
$var2="art='$id_art'";
}
if($id_anbieter != "" & $art != "")
{
$var12 = "AND";
}
if($aktiv != "blank")
{
$var3="aktiv='$aktiv'";
}
 
$result=mysql_query("select * from tarife where $var1 $var12 $var2 $var3");

Wenn ich jetzt aus id_anbieter und/oder art auswähle funktioniert es. Aber wenn ich dann noch z.B. die aktiven dazu gebe fehlt mir das AND. Möchte ich aber z.b. nur id_anbieter und aktiv auswählen, fehlt mir wieder das AND.

Ich steh auf der Leitung :-(
 
Hallo,
ich versuch mal deinen Code anzupassen, aber wie gesagt, ich keine Ahnung von PHP! Daher werde ich dort, wo ich nicht weiter weiß, die Lösung umschreiben.

PHP:
if($id_anbieter != "blank")
{
$var1="id_anbieter='$id_anbieter'";
}
if($id_art != "blank")
{
$var2="art='$id_art'";
}
if($aktiv != "blank")
{
$var3="aktiv='$aktiv'";
}
if($var1 != "" & ($var2 != "" | $var3 != ""))  //Komentar: ist var1 != "" und (var2 != "" oder var3 != "")
{
$var12 = "AND";
}
if($var2 != "" & $var3 != "")  
{
$var23 = "AND";
}
$result=mysql_query("select * from tarife where $var1 $var12 $var2 $var23 $var3");
Voraussetzung ist, dass jede nicht initialisierte Variable leer ist - also nicht einen zufälligen Wert hat.
 
Zuletzt bearbeitet:
Zurück