verzwicktes SQL-Statement
Rüdiger
- datenbank
0 Matzberger Marcus0 dedlfix
0 Struppi
Hallo zusammen,
habe folgendes Problem. ich habe in einer Suchmaske drei vordefinierte Dropdown-Menüs die aus einer Datenbank gefüllt werden.
Als erste Wert in jedem Menü ist "alle" ausgewählt. Wenn jetzt in jedem Dropdown-Menü ein anderer Wert als "alle" ausgewählt wird ist die sql abfrage kein Problem:
SELECT farbe, gruppe, komponente FROM Tabellen_name WHERE farbe=$farbe AND gruppe=$gruppe AND komponente=$komponente ORDER BY farbe ASC
Jetzt kommt das aber. Wenn in einem Dropdown-Menü kein anderer Wert ausgewählt wurde als "alle", muss ich dann mit if und else alle Möglichkeiten mit einem eigenen SQL-Statement abdecken oder kann ich das in einem machen? Da hörts bei mir aber leider auf, hab auch beim googlen nichts gefunden.
diese Möglichkeit funktioniert natürlich nicht aber nur so als Erklärung:
SELECT farbe, gruppe, komponente FROM Tabellen_name WHERE farbe=* AND gruppe=* AND komponente=* ORDER BY farbe ASC
Hat da einer eine zündende Idee?
Vielen Dank im voraus für eure Hilfe.
Gruß Rüdiger
Hallo,
SELECT farbe, gruppe, komponente FROM Tabellen_name WHERE farbe=* AND gruppe=* AND komponente=* ORDER BY farbe ASC
WHERE farbe = farbe ...
Grüße
Marcus
Hallo,
Hallo,
SELECT farbe, gruppe, komponente FROM Tabellen_name WHERE farbe=* AND gruppe=* AND komponente=* ORDER BY farbe ASC
WHERE farbe = farbe ...
Du kannst natürlich auch die Bedingung einfach weglassen
SELECT farbe, gruppe, komponente
FROM Tabellen_name
WHERE gruppe = $gruppe
AND komponente = $komponente
Grüße
Marcus
Hallo zusammen
erstmal vielen dank für eure antworten.
nach etwas schlaf und sinieren hab ich das so gelöst:
if($_POST['select_farbe'] == "alle") {
$such_farbe = "";
}else{
$such_farbe = $_POST['select_farbe'];}
if($_POST['select_grup'] == "alle") {
$such_grup = "";
}else{
$such_grup = $_POST['select_grup'];}
if($_POST['select_kompo'] == "alle") {
$such_kompo = "";
}else{
$such_kompo = $_POST['select_kompo'];}
$sql = "SELECT verfahren, gruppe, komponente, thema, thema_text FROM inhalte WHERE verfahren LIKE '%$such_farbe%' AND gruppe LIKE '%$such_grup%' AND komponente LIKE '%$such_kompo%' AND thema LIKE '%$suchen_worte%'";
weiß jetzt nicht ob das eine saubere lösung ist aber es funzt :-)
nochmal danke
Gruß Rüdiger
echo $begrüßung;
Wenn in einem Dropdown-Menü kein anderer Wert ausgewählt wurde als "alle", muss ich dann mit if und else alle Möglichkeiten mit einem eigenen SQL-Statement abdecken oder kann ich das in einem machen?
SELECT farbe, gruppe, komponente FROM Tabellen_name WHERE farbe=* AND gruppe=* AND komponente=* ORDER BY farbe ASC
Im Prinzip macht man das mit einzelnen IFs. Ich gehe mal davon aus, dass du PHP nimmst und da würde ich das so machen:
Zuerst brauchen wir ein definiert leeres Array:
$bedingungen = array();
Eine Bedingung sieht so aus, die anderen ähnlich:
if ($farbe != 'alle')
$bedingungen[] = sprintf("farbe='%s'", mysql_real_escape_string($farbe));
Nun enthält $bedingungen 0 bis n Werte der Form: farbe='irgendwas'. Dies kann mit implode und ' AND ' als "Klebstoff" zusammengefügt werden
$bedingung = implode(' AND ', $bedingungen);
und kann dann an das WHERE gehängt werden.
Anderenfalls könnte man noch WHERE farbe=farbe... nehmen (diese Bedingung ist ja immer erfüllt), aber auch hier braucht es ein paar if, die die '' mal (bei alle) weglasen oder sie bei anderen Werten (inklusive Escaping) hinzufügt.
echo "$verabschiedung $name";
Als erste Wert in jedem Menü ist "alle" ausgewählt. Wenn jetzt in jedem Dropdown-Menü ein anderer Wert als "alle" ausgewählt wird ist die sql abfrage kein Problem:
SELECT farbe, gruppe, komponente FROM Tabellen_name WHERE farbe=$farbe AND gruppe=$gruppe AND komponente=$komponente ORDER BY farbe ASC
Jetzt kommt das aber. Wenn in einem Dropdown-Menü kein anderer Wert ausgewählt wurde als "alle", muss ich dann mit if und else alle Möglichkeiten mit einem eigenen SQL-Statement abdecken oder kann ich das in einem machen?
Was ist daran verzwickt?
einfach die Bedingung weglassen.
Ich kann nur Perl, da würd ich es ungefähr so machen:
my @bedingungen = ();
push @bedingungen, 'farbe=' . $DBH->quote( $farbe) if $farbe;
push @bedingungen, 'gruppe=' . $DBH->quote( $gruppe) if $gruppe;
push @bedingungen, 'komponente=' . $DBH->quote( $komponente ) if $komponente ;
my where = join ' AND ', @bedingungen;
my $sth = $DBH->prepare( "SELECT farbe, gruppe, komponente FROM Tabellen_name WHERE $where ORDER BY farbe ASC");
@bedingungen ist ein Array und join heißt in PHP glaub ich implode.
Struppi.