Diese Funktion durchsucht eine beliebige SQL Datenbank komplett nach einem Suchwort.
In meinem kleinem Auftragsverwaltungsprogramm ist es manchmal nötig die komplette Datenbank nach einem bestimmten Wort zu durchsuchen (Name, Strasse, Auftragsnummer etc.) Bei mehr als 20 Spalten natürlich immer etwas umständlich eine SQL Abfrage zu formulieren.
Die kleine Funktion erledigt das jetzt für mich:
<?php
require_once "mysql_connect.php"; //Include um Verbindung zu DB aufzubauen, sollte klar sein
//die Funktion für eine SQL Abfrage heisst hier do_query()
$table = "tabelle"; //hier muss natürlich der Tabellenname angegeben werden
function alt_f ($table,$searchstring) {
$cols = do_query("SHOW COLUMNS FROM $table"); //gibt die Spaltennamen aus
if (!$cols) {
die ('Abfrage konnte nicht ausgeführt werden: ' . mysql_error());
}
$string = ""; //nen paar Variablen initialisieren
$i = 0;
if (mysql_num_rows($cols) > 0) { // die einzelnen Spaltennamen durchlaufen
while ($row = mysql_fetch_assoc($cols)) { //gibt den Spaltennamen aus
$i++; //mitzählen
$string .= "`".$row[Field]."` LIKE '%$searchstring%'" ; //fügt die Anweisung für die SQL Abfrage zusammen
if ($i < mysql_num_rows($cols)) $string .= " OR "; //damit am Ende kein weiteres OR steht wird das letzte
} //nicht angefügt
}
$result = do_query(" SELECT * FROM `$table` WHERE $string "); //stellt die SQL Anfrage mit dem eben gebastelten Suchstring
if (mysql_num_rows($result) > 0) {
while($row = mysql_fetch_assoc($result)) { //Array aus Ergebnissen bilden
$data[] = $row;
}
return ($data); //Array zurückgeben
}
else return(false); //bzw. ein False wenn die Suche erfolglos war
}
if ($searchstring=$_POST[searchstring]) { //ab hier nur Script zum ausprobieren der Funktion
if ($result=alt_f($table,$searchstring)) {
echo "Die Suche ergab ".count($result)." Ergebnisse<br>";
foreach ($result as $value) {
print_r($value); echo "<br>";
}
}
else echo "Keine Ergebnisse";
}
else {
echo '<form action="alt_f.php" Method="post"><br>
Suchwort: <input type="text" Name="searchstring"><br>
<input type="submit"></form>';
}
?>
Diese Funktion gibt jetzt aber gleich das Suchergebnis als Array zurück, wenn man aber nur den entsprechenden Suchstring gebastelt haben möchte, kann man das mit einigen kleinen Änderungen:
<?php
function alt_f ($table,$searchstring) {
$cols = do_query("SHOW COLUMNS FROM $table"); //gibt die Spaltennamen aus
if (!$cols) {
die ('Abfrage konnte nicht ausgeführt werden: ' . mysql_error());
}
$string = ""; //nen paar Variablen initialisieren
$i = 0;
if (mysql_num_rows($cols) > 0) { // die einzelnen Spaltennamen durchlaufen
while ($row = mysql_fetch_assoc($cols)) { //gibt den Spaltennamen aus
$i++; //mitzählen
$string .= "`".$row[Field]."` LIKE '%$searchstring%'" ; //fügt die Anweisung für die SQL Abfrage zusammen
if ($i < mysql_num_rows($cols)) $string .= " OR "; //damit am Ende kein weiteres OR steht wird das letzte
} //nicht angefügt
}
return($string); //gibt den Suchstring zurück
}
?>
Die Abfrage müsste dann aber noch komplettiert werden und kann dann noch entsprechend angepasst werden:
PHP
1:
2:
3:
4:
<?php
$suchstring = alt_f($table,$meinesuche);
$q = do_query (" SELECT * FROM `$table` WHERE ". $suchstring. " DESC LIMIT(1,1) ");
?>
Orginal von Crisma
Diese Funktion durchsucht eine beliebige SQL Datenbank komplett nach einem Suchwort.
ÄHm dus chreibst er sucht die ganze DB durch für mich sieht das aber eher danach aus als würd er eine ganze Tabelle nahc einem suchwort durchsuchen und nicht eine ganze Datenbank. Also pass mal auf deine Formulierungen besser auf. Mit deiner Funktion durchsuchst du eine ganze Tabelle nicht eine ganze Datenbank
Außerdme nicht SQL DB sondern ein DBMS welches SQL versteht
durchsucht ein beliebige Tabelle in einem beliebigen DBMS welches SQL versteht. so
Mfg
alex
Post wurde schon 1x editiert, das letzte mal am 22.10.2010 um 22:20 von alex1702