wie Leerzeichen bei der Suche ignorieren?

Registrierer

Erfahrenes Mitglied
Ich hab eine DB mit Kennzeichen. Bei der Suche kann es aber sein, dass anstatt z. B.:
AB-C 247
AB-C247 oder
ABC247
als Suchbegriff eingegeben wird.
Wie kann ich erreichen, das bei der Suche die Leerzeichen und der Bindestrich ignoriert wird und wie in diesem Beispiel bei allen 3 Suchbegriffen das
in der DB gespeicherte Kennzeichen AB-C 247 gefunden wird?

Danke.
 
PHP:
<?php

$old = 'ABC247';

$new = preg_replace("#^([A-Z]{2})-?([A-Z]{1}) ?([\d]*)$#", "$1-$2 $3", $old);

echo $new; // Gibt AB-C 247 aus

?>

Ich bin mal davon ausgegangen, dass es immer aus 2 Buchstaben, einem Bindestrich, dann wieder 1 Buchstaben, dann Leerzeichen und dann unbeschränkt viele Zahlen besteht :)
 
Hi

wenn die auch so unterschiedlich in der Datenbank gespeichert sind kannst du Wildcards nutzen:

SQL:
SELECT * FROM Kennzeichen WHERE Kennzeichen LIKE "AB%CD%12345"
 
Ich bin mal davon ausgegangen, dass es immer aus 2 Buchstaben, einem Bindestrich, dann wieder 1 Buchstaben, dann Leerzeichen und dann unbeschränkt viele Zahlen besteht :)

Vielen Dank, aber nein, natürlich nicht! an sowas hatte ich auch schon gearbeitet ;-)

Ein Kennzeichen kann ja in der Form:
A-BC 1234
AB-C 123
ABC-DE 12
o. ä. vorliegen. Da gibt es viele verschiedene Möglichkeiten

Beide Vorschläge sind also nicht das wonach ich suche.

Wenn ich nach "abc1234" suche möchte ich auch A-BC 1234 finden.
explode geht nicht weil das Trennzeichen unbekannt ist.

Jemand noch einen Tip?
 
Bin jetzt mit str_split() zumindest einen Schritt weiter.
Mit:
Code:
$suche = (str_split('ABC-D 123'));
echo "<pre>". print_r($suche, true) ."</pre>";
Array
(
[0] => A
[1] => B
[2] => C
[3] => -
[4] => D
[5] =>
[6] => 1
[7] => 2
[8] => 3
)
erhalte ich ein Array, in dem alle Kriterien vorkommen und wo ich noch die leerzeichen entfernen müsste.
Die Abfrage müsste nun so aussehen:
Code:
SELECT * FROM TABELLE WHERE AMTKZ LIKE  '%A%' AND AMTKZ LIKE  '%B%'
AND AMTKZ LIKE  '%C%' AND AND AMTKZ LIKE  '%-%' AND AMTKZ LIKE  '%D%' AND AMTKZ LIKE  '% %'  
AND AMTKZ LIKE  '%1%' AND AMTKZ LIKE  '%2%' AND AMTKZ LIKE  '%3%'
Wie kann ich das Array nun so verwenden das dieser Suchstring entsteht?
 
Hmm entweder z.B. so :
PHP:
$suchString = 'ABC-D 123';
$mysqlSuchString = str_split(str_replace(" ", "", $suchString));

$mysqlQueryString = "SELECT * FROM TABELLE WHERE";
for ($i = 0; $i < count($mysqlSuchString); $i++)
	$mysqlQueryString .= " AMTKZ LIKE  '%$mysqlSuchString[$i]%' AND";

echo substr($mysqlQueryString,0,strlen($mysqlQueryString) -4);
Code:
SELECT * FROM TABELLE WHERE AMTKZ LIKE '%A%' AND AMTKZ LIKE '%B%' AND AMTKZ LIKE '%C%' AND AMTKZ LIKE '%-%' AND AMTKZ LIKE '%D%' AND AMTKZ LIKE '%1%' AND AMTKZ LIKE '%2%' AND AMTKZ LIKE '%3%'

Oder aber mit folgender Variante.
Bei dieser Variante wird ein suchstring immer auf das "abc1234" format gebracht (also ohne Leer- / Trennzeichen ).
Danach wird der Query String erstellt und einfach an der Stelle wo das Leerzeichen stehen müsste eine WIldcard eingefügt sowie an allen stellen an denen ein Trennzeichen vorkommen könnte.
Aber sieh selbst :
PHP:
$rPattern = "/[^\d|a-z|A-Z]/";
$suchString = preg_replace($rPattern,"",$suchString);
$mPattern = "/([a-zA-Z]*)(\d*)/";
preg_match($mPattern,$suchString,$matches);

$aSplit = str_split($matches[1]);
$out = "SELECT * FROM TABELLE WHERE";
for($i = 1; $i < count($aSplit);$i++){
	$out .= " AMTKZ LIKE ";
	for($j=0;$j<$i;$j++){ $out .= $aSplit[$j];}
	$out .= "%";
	for($j = $i;$j<count($aSplit);$j++){ $out .= $aSplit[$j];}
	$out .= ($i < count($aSplit) - 1) ? "%$matches[2] or" : "%$matches[2]";
}
echo $out;
Code:
SELECT * FROM TABELLE WHERE AMTKZ LIKE A%BCD%123 or AMTKZ LIKE AB%CD%123 or AMTKZ LIKE ABC%D%123
 
Zurück