Suchabfrage mit array_intersect-Schnittmenge

markus_re

Grünschnabel
Folgendes soll verwirklicht werden:
Ich möchte drei Eingaben(Firmenname, PLZ und Ort) aus einer Filtern.
Wäre eigentlich recht einfach, wenn dort nicht der Zusatz wäre das nur die Datensätze angezeigt werden die einer bestimmten Kategorie angehören. Ausgegeben werden soll nur Kontakt besteht/besteht nicht. Um die query-Belastung möglichst gering zu halten habe ich mir gedacht das ich das ganze am besten mit array_intersect machen kann.

Mein bisheriger Code:

PHP:
mysql_connect("localhost") or die (mysql_error());
mysql_select_db("_test") or die ("Datenbank existiert nicht!"); 
	
$suche_firma= "SELECT * FROM `adr_adressdaten` WHERE (`adr_firma` LIKE '$f_name%') AND (`adr_kontakt` = '3')";
$suche_plz= "SELECT * FROM `adr_adressdaten` WHERE (`adr_plz1` LIKE '$plz%') AND (`adr_kontakt` = '3')";
$suche_ort= "SELECT * FROM `adr_adressdaten` WHERE (`adr_ort` LIKE '$ort%') AND (`adr_kontakt` = '3')";

$ergebnis_firma = mysql_db_query("termemo_test", $suche_firma);
$ergebnis_plz = mysql_db_query("termemo_test", $suche_plz);
$ergebnis_ort = mysql_db_query("termemo_test", $suche_ort);
	
while ($row = mysql_fetch_array($ergebnis_firma))
		{
		$array_firma = $row['adr_id'];
		}
while ($row = mysql_fetch_array($ergebnis_plz))
		{
		$array_plz = $row['adr_id'];
		}
while ($row = mysql_fetch_array($ergebnis_ort))
		{
		$array_ort = $row['adr_id'];
		}
	
$ergebnis_array = array_intersect($array_firma, $array_plz, $array_ort);
		
		if ($ergebnis_array != 0)
		{
			echo "Es besteht ein Kontakt";
		}
		else 
		{
			echo "Es besteht kein Kontakt";
		}
thx for help

m
 
Zuletzt bearbeitet:
Ich würde das in einer einzelnen Abfrage machen:

SELECT * FROM adr_adressdaten
WHERE
(adr_firma LIKE '$f_name%'
OR adr_plz1 LIKE '$plz%'
OR adr_ort LIKE '$ort%')
AND adr_kontakt = '3'

Das funktioniert einwandfrei und belastet den Server weniger als drei separate Queries.

Marian
 
Sorry,
habe mich nicht eindeutig ausgedrückt.
Also nochmal von vorne:
- Datenbank nach drei Suchfelder durchsuchen (Firmenname, PLZ und Ort).
- Es sollen nur die Datensätze angezeigt werden die einer bestimmten Kategorie angehören.
- Wenn ich jetzt einen Datensatz suche und Bayer 42* Wuppertal eingebe, gibt er mir Bayer 42* Wuppertal und Bayer * Leverkusen aus, obwohl ich einzig und allein wissen möchte ob die Firma Bayer in 42* Wuppertal der Kategorie angehört.

-Als Ausgabe soll nur stehen Kontakt besteht/ besteht nicht

thx & bye
 
Du fragst die Datenbank mit LIKE ab, dann kann es schon sein, das mehr als ein Tupel heraus kommt.
Wenn du explizite Ergebnisse erreichen willst, solltest du mit = arbeiten.
 
Wenn alle Bedingungen übereinstimmen sollen, musst du mit AND arbeiten:

SELECT * FROM adr_adressdaten
WHERE adr_firma LIKE '$f_name%'
AND adr_plz1 LIKE '$plz%'
AND adr_ort LIKE '$ort%'
AND adr_kontakt = '3'

Das sollte dir das gewünschte Ergebnis bringen.

Marian
 

Neue Beiträge

Zurück