brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 19-08-2009, 14:51
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
streuner befindet sich auf einem aufstrebenden Ast
Standard Ale Tabellen durchsuchen

Hi.

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. 
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
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

Geändert von streuner (19-08-2009 um 14:56 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 19-08-2009, 14:57
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 24.486
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von streuner Beitrag anzeigen
Mit folgendem Code durchsuche ich alle meine MySQL DB Tabellen:
Da sollte vielleicht erst mal geklärt werden, woraus sich denn eigentlich die Notwendigkeit ergibt, "alle" Tabellen auf einmal zu durchsuchen.

Was hast du für Tabellen, wie sind die strukturiert, was steht da drin?


Und alle Spalten mit dem LIKE-Operator zu durchsuchen, noch dazu vor und hinter dem Suchbegriff mit der %-Wildcard - das ist absolut unperformant, verhindert die Nutzung jegliches möglicherweise existierenden Index'.

Mit der Volltextsuche bist du da vielleicht besser bedient.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 19-08-2009, 15:00
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Na im Resultset sind die Einträge ja noch nicht doppelt (Notfalls per DISTINCT), da machst du wohl bei der Ausgabe was falsch.
Mit Zitat antworten
  #4 (permalink)  
Alt 19-08-2009, 15:02
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.550
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

nur mal ne Vermutung. Wenn du Views definiert hast, werden die ebenfalls von SHOW TABLES zurückgeliefert und würden logischerweise die selben Daten enthalten, was die doppelte und dreifache Multiplizität erklären würde.

Tipp: mit SHOW FULL TABLES hat das Ergebnis noch eine zweite Spalte, in der der Tabellentyp steht ("BASE TABLE", "VIEW", "SYSTEM VIEW").

Gruß,

Anja

Edit:
Zitat:
Code:
$aHits[$sTable][] = $aHit;
Ach nee, die hätten dann ja nen anderen Namen.

Geändert von AmicaNoctis (19-08-2009 um 15:05 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 19-08-2009, 15:10
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
streuner befindet sich auf einem aufstrebenden Ast
Standard

@wahsaga: Die Notwendigkeit ergibt sich aus dem Pflichten- und Lastenheft ! Tabellen sind nicht redundant in der 3. Normalform über eine ID miteinander gekoppelt (ca. 10-12 Tabellen). Eine Tabelle enthält allg. Zugangsdaten (email, aktivierungscode...usw.), weitere Tabellen enthalten allg. Daten zur den registrierten Usern, Bildverlinkungen...usw. und eine Tabelle beinhaltet CSS & Layout Attribute.

"Und alle Spalten mit dem LIKE-Operator zu durchsuchen, noch dazu vor und hinter dem Suchbegriff mit der %-Wildcard - das ist absolut unperformant, verhindert die Nutzung jegliches möglicherweise existierenden Index'." Hm...da magst Du wohl recht haben. Eine andere Möglichkeit ist mir ehrlich gesagt nicht eingefallen. Was meinst Du mit der Volltextsuche genau?

@onemorenerd: DISTINCT ist ne gute Idee. Stimmt, an die Ausgabe habe ich jetzt gar nicht gedacht*ärger*! Schaue ich mir gleich nochmal an!

@AmicaNoctis: interessant, das habe ich gar nicht bedacht!

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #6 (permalink)  
Alt 19-08-2009, 15:21
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 24.486
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von streuner Beitrag anzeigen
Was meinst Du mit der Volltextsuche genau?
http://www.google.de/search?hl=de&q=mysql+volltextsuche

Und benutze bitte die [quote]-Tags, wenn du zitierst.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 19-08-2009, 15:23
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
streuner befindet sich auf einem aufstrebenden Ast
Standard Mist

...hab den Fehler gefunden (war natürlich nicht in der Funktion). War bei der Ausgabe des zurückgegeben Arrays und der Darstellung in einer Tabelle. Sorry, hab den Wald vor lauter Bäumen nicht gesehen und den Fehler falsch gesucht...sollte wohl erstmal ne Kaffee Pause einlegen! Ich lasse mir das Array + Subarray (nenne ich das mal) über 2 ineinander verschachtelte For-Schleifen ausgeben mit

PHP-Code:
for ($array_splitten 0$array_splitten sizeof($array); $array_splitten++){
....
for (
$subarray=1;$subarray<sizeof($org_array);$subarray++){
//..
}
//..

und ich hab mich mit dem Zähler im ersten Array vertan*ärger*! Hab noch ne Bedingung eingebaut und jetzt funzt es.

@wahsaga: Volltextsuche klingt wirklich gut. Hab mir gerade ein paar Beispiel angeschaut. Werde ich mal vorschlagen - erscheint mir auch deutlich sinniger!

thanx.

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #8 (permalink)  
Alt 19-08-2009, 15:26
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
streuner befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Und benutze bitte die [quot]-Tags, wenn du zitierst.
ok, hatte ich direkt im Eingabeeditor nicht gefunden! thanx
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Datenbankdesign: lieber große Tabellen oder viele kleine Tabellen sono SQL / Datenbanken 0 20-01-2006 20:17
Tabellen durchsuchen Klaus06 SQL / Datenbanken 1 27-05-2005 10:24
InnoDB Tabellen und MyISAM Tabellen in einer DB? ment SQL / Datenbanken 2 19-06-2004 14:44
Script zum einlesen/durchsuchen ect. von Excel Tabellen .. oder andere Lösung ? AsciFan Appz und Script Gesuche 1 02-06-2004 16:50
Durchsuchen von mehreren Tabellen cyberflip SQL / Datenbanken 5 23-04-2002 23:08

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

EM 2012 Tipp-Spiel ansehen EM 2012 Tipp-Spiel

Online Tipp-Spiel zur Fussball Europameisterschaft 2012, basierend auf php-Script mit hinterlegter mySql-Datenbank

27.05.2012 tippimnetz | Kategorie: PHP/ Spiele
Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:04 Uhr.