Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » komplette SQL DB nach einem Ausdruck durchsuchen    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Crisma
Mitglied
Guter User


Dabei seit: 13.09.2005
Herkunft: keine Angabe
Posts: 319
     komplette SQL DB nach einem Ausdruck durchsuchen Zitat | Bearbeiten

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 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
<?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 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

<?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) ");
?>



02.04.2008, 22:44 Profil | PM | E-Mail  
FRAGE007
Mitglied
Guter User


Dabei seit: 13.03.2009
Herkunft: Berlin
Posts: 383
      Zitat | Bearbeiten

ich bekomme immer diesen fehler:
Fatal error: Call to undefined function do_query() in


22.10.2010, 14:59 Profil | PM | E-Mail  
Vielgeist
Mitglied
Exzellenter User


Dabei seit: 26.12.2008
Herkunft: Berlin
Posts: 1371
      Zitat | Bearbeiten

ich würd mal an deiner stelle die kommentare lesen die bei der funktion stehen. das erklärt sich von selbst


CONTEMPLATION

If today was perfect, there would be no need for tomorrow.


Mein Youtube Channel
22.10.2010, 15:24 Profil | PM | E-Mail  
alex1702
Mitglied
Exzellenter User


Dabei seit: 25.05.2008
Herkunft: NRW
Posts: 1555
      Zitat | Bearbeiten

Zitat:
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
22.10.2010, 22:18 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » komplette SQL DB nach einem Ausdruck durchsuchen   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz