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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

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: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
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: 25.236
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.471
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.709
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: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
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: 25.236
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: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
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: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
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 Apps und PHP 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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:46 Uhr.