Hi.
Mit folgendem Code durchsuche ich alle meine MySQL DB Tabellen (Eingabe eines Suchbegriffes in ein Textfeld):
Das Problem ist jetzt, dass er mir die Ergebnisse nicht der Anzahl entsprechend, sondern gefundene Einträge doppelt oder dreifach ausgibt. Finde den Fehler einfach nicht. Vielleicht hat jemand nen Tipp für mich, danke.
mfg streuner
Mit folgendem Code durchsuche ich alle meine MySQL DB Tabellen (Eingabe eines Suchbegriffes in ein Textfeld):
PHP-Code:
function mysqlSearch($sSearch)
{
// Eingabestring splitten
$aSearch = explode(' ', preg_replace('#\s+#', ' ', $sSearch));
//Anzahl der Suchbegriffe bestimmen
$iSearch = count($aSearch);
if ($iSearch == 0) {
return array();
}
//Sql-Injektion vorbeugen
if (get_magic_quotes_gpc()) {
$aSearch = array_map('stripslashes', $aSearch);
}
$aSearch = array_map('mysql_real_escape_string', $aSearch);
//Alle Tabellen aus der ausgewählten Datenbank
$sSQL1 = 'SHOW TABLES';
$rRes1 = mysql_query($sSQL1);
//Übereinstimmungen sammeln
$aHits = array();
while ($aTable = mysql_fetch_array($rRes1)) {
$sTable = $aTable[0];
//Alle Spalten von allen Tabellen ermitteln
$sSQL2 = "SHOW COLUMNS FROM `$sTable`";
$rRes2 = mysql_query($sSQL2);
// Kombiniere Suchbegriff mit den Spalten
$aPermutation = array();
while ($aColumn = mysql_fetch_assoc($rRes2)) {
$sColumn = $aColumn['Field'];
for ($i = 0; $i < $iSearch; $i++) {
$sSearchword = $aSearch[$i];
$aPermutation[] = "`$sColumn` LIKE '%$sSearchword%'";
}
}
//Kombinieren als OR-Kondition mit implode
$sSQL4 = "SELECT * FROM `$sTable` WHERE " . implode(' OR ', $aPermutation);
$rRes4 = mysql_query($sSQL4); //Query ausführen
//Ergebnisse sammeln
while ($aHit = mysql_fetch_assoc($rRes4)) {
$aHits[$sTable][] = $aHit;
}
}
return $aHits;
}
//..
$array = mysqlSearch($sSearch);
//usw.
mfg streuner
Kommentar