# MySQL AND und OR Bedingungen verknüpfen



## suntrop (4. November 2008)

hi

Ich habe eine kleines Web-Tool mit dem ich länderspezifisch Daten ausgeben kann.
Vorher sah mein SQL-Befehl so aus:

```
$sql = 'SELECT * FROM contacts';

if ($_GET['lang_de'] == 'de' && empty($_GET['lang_nl'])) {
	$sql .= ' WHERE country="' . mysql_real_escape_string($_GET['lang_de']) . '"';
}
else if ($_GET['lang_nl'] == 'nl' && !isset($_GET['lang_de'])) {
	$sql .= ' WHERE country="' . mysql_real_escape_string($_GET['lang_nl']) . '"';
}
else {
	$sql .= ' WHERE 1';
}
if( !empty($sort_day) ) {
    $sql .= ' AND sort_day="'.$sort_day.'"';
}
if( !empty($sort_month) ) {
    $sql .= ' AND sort_month="'.$sort_month.'"';
}
if( !empty($sort_year) ) {
    $sql .= ' AND sort_year="'.$sort_year.'"';
}
$sql .=' ORDER BY id DESC LIMIT '.$sort_start.','.$sort_quantity;
$rs = mysql_query($sql);
```

Jetzt kommt neben DE und NL noch UK hinzu. Das macht es wesentlich komplizierter:

```
if (isset($_GET['lang_de']) || isset($_GET['lang_nl']) || isset($_GET['lang_uk'])) {
	$sql = 'SELECT * FROM  contacts WHERE country="'.$_GET['lang_de'].'" OR country="'.$_GET['lang_nl'].'" country="'.$_GET['lang_uk'].'"';
}
else {
	$sql = 'SELECT * FROM  contacts WHERE 1';
}
if( !empty($sort_day) ) {
    $sql .= ' AND sort_day="'.$sort_day.'"';
}
if( !empty($sort_month) ) {
    $sql .= ' AND sort_month="'.$sort_month.'"';
	echo 'c';
}
if( !empty($sort_year) ) {
    $sql .= ' AND sort_year="'.$sort_year.'"';
}
$sql .=' ORDER BY id DESC LIMIT '.$sort_start.','.$sort_quantity;
$rs = mysql_query($sql);
```
denn so funktioniert die Datumsausgabe nicht mehr. Ich denke mal es liegt an daran, dass ich erst schreibe WHERE xxx OR yyy und im Anschluss eine AND Verknüpfung mache. Das scheint so wohl nicht zu funktionieren.
Nur wie geht es dann? 
lang_de ... sind übrigens Checkboxen und sort_day ... sind Zahlwerte die der Nutzer eintippen kann.


Grüße
suntrop


----------



## Sprint (4. November 2008)

Zuerst fehlt zwischen NL und UK noch ein OR.
Dann solltest du die OR Bedingungen in Klammern setzen. Sonst wird nur die letzte OR Bedingung, also uk,  mit dem Datum verknüpft.


----------



## suntrop (4. November 2008)

Das OR habe ich nur beim Eintrag hier vergessen 
Aber die Klammern haben geholfen!

Vielen Dank für den Tipp. Es klappt prima, mein Tool 

Grüße
suntrop


----------

