Zum Inhalt springen

MySql Abfrage aus Array erstellen

Erstellt am 11. September 2006 · 1 Antwort · letzte Antwort am 11. September 2006

Tags: Frage

nickno ·

Hallo,
ich habe folgendes Problem. In einer Extension ist eine Suche eingebaut. Man soll eine Tabelle durch diverse Kriterien durchsuchen können. Das Array, was die Suchkriterien übergibt sieht folgendermaßen aus:
myextension[plz][0] = 8
myextension[plz][1] = 9
myextension[plz][2] = 0
myextension[gebiet] = 3
myextension[noch_etwas][0] = ein_wert
myextension[noch_etwas][1] = noch_ein_wert

Wie kann ich aus diesem Array am besten eine Abfrage in MySQL erstellen? Die Werte auf der 2. Ebene sind stets als Alternativ ("OR") zu verstehen. Daher mein Ansatz:

	function generateWhere($sql_arr) {
		// print_r($sql_arr); // DEBUG 
			foreach($sql_arr as $key => $value) {
	
				// Array enthält mehrere Objekte
				if( sizeof($sql_arr[$key]) > 1 ) {
					$tempArray = array();
					foreach($sql_arr[$key] as $values) {
							$tempArray[] = $key . " = ".  $values;
						}
	
					$where[] = "(" . implode(" OR ",$tempArray) . ")";
	
				// Array enthält genau ein Objekt
				} elseif(sizeof($sql_arr[$key]) == 1 ) {
					$where[] = $key . " = ".  $value;
				}
				
			}
			return implode(" AND ", $where);
		}

Das Ergebnis passt an dieser Stelle auch. Das Problem ist nun, dass die Postleitzahl ja nicht "8" ist, sondern lediglich mit der 8 anfangen soll. Wie lautet denn hier nun die Abfrage??

Über jeglichen Ansatz würde ich mich freunen, denn ich hab nicht mal nen blassen Schimmer, wo ich hier ansetzen kann. #angry#

Gruß,Tim

woida ·

Ich weiß ja nicht, was du mit deinem Programm machst, aber wenn du die PLZ als Varchar speicherst, kannst du mit LIKE "8%" alle PLZs finden, die mit 8 beginnen.
Wenn du aber auf einen Integer angewiesen bauchst dein "WHERE PLZ BETWEEN($PLZ*10000,($PLZ+1)*10000)"