Mysql Abfrage mit PHP Filter

Cem

Grünschnabel
Also ich komme direkt zu meinem Problem, bin schon seit Stunden am grübeln aber mir fällt nichts dazu ein.

Also ich habe nen Formular das 6 verschiedene Filter(<select>) hat. Zweie dieser, mal als bsp genannt, sind Kategorie und Format. Mit diesen Filtern will ich eine SQL abfrage bilden die es erlaubt bestimmte Daten auszulesen. Das klappt auch soweit. Meine Abfrage schaut wie folgt aus:
Code:
mysql_query(" SELECT * FROM table WHERE kategorie='$katid' AND format='$formatid' ");

nur wenn ich jetzt alle Kategorien haben will anstatt eine bestimmte oder alle Formate dann komme ich zu meinem Problem. Man koennte mit if abfragen ob alle und dann jeweils reagieren nur bei 6 Filtern sind das 2^6 if-bedingungen. ich weiss das ich bis jetzt diese bedingungen konstruiert haette nur soll das ganze ja auch bissl eleganter sein :p

Also meine Frage wie kann ich das lösen, gibt es sowas wie WHERE kategorie=* dann braeuchte ich net die Abfrage zu aendern sonder $katid="*" und das waers. Habe auch schon überlegt die ganze WHERE Klausel zu übergen also WHERE '$katid' und in $katid steht dann jenachdem $katid="katid='1' "; oder für alle kategorien $katid="1";

Danke schonma im Voraus und bin mir sicher das es da eine elegante lösung geben muss, habs ja schon auf mehrere seiten gesehn solche Filter möglichkeiten.

MFG
 
Probier mal Folgendes:
HTML:
<form>
	<select name="filter[a]">
		<option value="null">kein Filter</option>
		<option value="filterwert-1">Filterwert-1</option>
		…
		<option value="filterwert-n">Filterwert-n</option>
	</select>

	…

	<select name="filter[z]">
		<option value="null">kein Filter</option>
		<option value="filterwert-1">Filterwert-1</option>
		…
		<option value="filterwert-n">Filterwert-n</option>
	</select>
</form>
PHP:
<?php

	…
	$available_filters = array('a', …, 'z');
	$query = '
		SELECT
		        *
		  FROM
		        `table`
		  WHERE 1 ';

	foreach( $_POST['filter'] as $name => $value ) {
		if( !in_array($name, $available_filters) || $value == 'null' ) {
			continue;
		}
		$query .= ' AND `'.$name.'` = "'.mysql_real_escape_string($value).'" ';
	}

	…

?>
Anstatt des Nullwerts null ist natürlich auch eine leere Zeichenkette oder eine beliebig andere Zeichenlette möglich.
 
Zurück