php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-01-2008, 17:03
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard QueryProblem mit MATCH

Moin Leute,

Also, es geht um Folgendes. Ich habe ein Script, mit dem man kategorien erstellen kann. Nun möchte ich eine Abfrage basteln, die die bereits vorhandenen Kategorien nach Kategorien durchsucht, die ähnlich der Eingabe sind. Dies wollte ich auf folgendes weise mit MATCH tun:



PHP-Code:
$query "SELECT
            name, id
           FROM
               "
.$sql_db_listen."
           WHERE
               MATCH(name) AGAINST('"
.$name."')
           AND
               gruppe = '"
.$gruppen_id."'

           "

Ausgeben wollte ich das ganze dann erstmal wie folgt um zu schauen ob es überhaupt funktioniert:

PHP-Code:
$res mysql_query($query);
     
$row mysql_fetch_assoc($res);

     echo 
'<pre>';
     
print_r($row);
     echo 
'</pre>'
Ich habe das Feld "name" auf VOLLTEXT-Index gesetzt, wie es im MySQL Handbuch steht. Dann hab ich einen Datensatz erstellt bei dem name ="Banane" ist. Wenn ich nun in mein Eingabefeld ( $name im Query ) "Banane" eingebe wird aber kein Ergebnis ausgegeben. $row ist vollkommen leer.

Wo liegt mein Fehler ? Danke schonmals im Voraus.
Mit Zitat antworten
  #2 (permalink)  
Alt 19-01-2008, 19:56
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Keiner ne Idee ? Oder ist das überhaupt der falsche Ansatz für eine Funktion, die einem bereits vorhandene, ähnliche Einträge auflisten soll ?
Mit Zitat antworten
  #3 (permalink)  
Alt 21-01-2008, 17:25
arkos
 PHP Senior
Links : Onlinestatus : arkos ist offline
Registriert seit: Feb 2003
Ort: hamburg
Beiträge: 1.015
arkos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

doch.

STOPPWORT!!


http://dev.mysql.com/doc/refman/5.1/...xt-search.html

(suche dort nach originalsatz und ersetze MySql durch Banane : "Das Suchergebnis ist leer, weil das Wort „MySQL“ in mindestens 50 Prozent der Datensätze vorhanden ist. Insofern wird es letztendlich als Stoppwort behandelt.")



(edit: vielleicht würde ein einfaches LIKE in deinem Falle ausreichen??)
__________________
**********
arkos
**********
Mit Zitat antworten
  #4 (permalink)  
Alt 21-01-2008, 19:00
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke erstmal für deine Antwort!

Für das Beispiel der Banane würde ohne Frage ein LIKE ausreichen.

Der eigentliche Verwendugnszweck ist jedoch, zu ermitteln ob bereits Listen mit einem ähnlichen Namen, wie dem, unter dem man gerade eine erstellen will, vorhanden sind. Damit Listen eben nicht doppelt erstellt werden.

Soweit ich das verstanden habe gibt MATCH einen Wert zurück, der für die Übereinstimmung des Suchwortes und des Textes im Datenbankfeld steht.

Ich dachte mir ich probier das lieber über ein QUery zu regeln. Ich könnte natürlich auch alle Listen-Titel aus der DB holen und dann mit levenshtein(); die Übereinstimmung ermitteln und dann danach sortieren. Dachte aber das mit dem Query ist besser für die Performance
Mit Zitat antworten
  #5 (permalink)  
Alt 21-01-2008, 20:11
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Okay, ich hab mir alles nochmal genau durchgelesen. Die Sache funktioniert jetzt.

Ein Problem habe ich allerdings noch. Ein "Joker" in der Suche ist nur beim BOOLEAN MODE möglich, allerdings hat der BOOLEAN MODE den Nachteil, dass die Ergebnisse nichtmehr nach Relevanz sortiert werden.

Wäre aber doof, wenn beim Suchwort "Banane" der Begriff "Bananenbrot" nicht gefunden würde. Allerdings mag ichs auchnich, wenn das nicht nach Relevanz sortiert wird.

Hat da jemand ne Lösung ?
Mit Zitat antworten
  #6 (permalink)  
Alt 22-01-2008, 10:24
arkos
 PHP Senior
Links : Onlinestatus : arkos ist offline
Registriert seit: Feb 2003
Ort: hamburg
Beiträge: 1.015
arkos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wenn die funktion annähernd wasserdicht sein soll, und listen nicht 100 mal täglich angelegt werden, dann müsstest du vielleicht überlegen, ob du mehrere funktion nacheinander kombinierst. spirch match, like und vielleicht sogar levenshtein??



Zitat:
Original geschrieben von nohfreak
Allerdings mag ichs auchnich, wenn das nicht nach Relevanz sortiert wird.

Zitat:
Original geschrieben von http://dev.mysql.com
Das folgende Beispiel ist komplexer. Die Abfrage gibt die Relevanzwerte zurück und sortiert die Datensätze zudem nach absteigender Relevanz. Um dieses Ergebnis zu erhalten, sollten Sie MATCH() zweimal angeben: einmal in der SELECT-Liste und ein weiteres Mal in der WHERE-Klausel. Hierdurch wird die Systembelastung nicht erhöht, da der MySQL-Optimierer bemerkt, dass die beiden MATCH()-Aufrufe identisch sind, und den Code für die Volltextsuche insofern nur einmal aufruft.

mysql> SELECT id, body, MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root') AS score
-> FROM articles WHERE MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root');
+----+-------------------------------------+-----------------+
| id | body | score |
+----+-------------------------------------+-----------------+
| 4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |
| 6 | When configured properly, MySQL ... | 1.3114095926285 |
+----+-------------------------------------+-----------------+
2 rows in set (0.00 sec)
??? oder versteh ich dich falsch?
__________________
**********
arkos
**********
Mit Zitat antworten
  #7 (permalink)  
Alt 22-01-2008, 18:28
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Öhm, ja, du verstehst mich falls. Dennoch möchte ich dir erstmal für die Hilfe danken!

Also, eine MATCH-KLausel reicht schon, der sortiert dann automatisch absteigend nach Relevanz, hab ich im Manual gelesen und auch ausprobiert.

Es gibt aber zwei Typen von MATCH-Queries. Einmal die Natursprachliche-Suche und die Boolean-Suche. Beim Natursprachlichen kann man keine Joker ( Wie % bei LIKE ) angeben. Das geht nur beim Boolean-Mode. Benutzt man aber den Boolean-Mode, dann wird nicht absteigend nach Relevanz sortiert.

Nun könnte man ja sagen, dann benutzt man zur Relevanz-Sortierung eben den Natursprachlichen Modus. Hab ich ausprobiert, geht nicht, wirft MySQL-Error. Macht ja auch Sinn, wie sollen die Ergebnisse des einen Modus nach den Werten des anderen sortiert werden. Evtl. würden manche Datensätze beim einen ja garnicht gefunden.

Also da dieses Script nicht allzuoft benutzt werden wird, denke ich, ich werde doch lieber alle Titel auslesen und mit PHP auswerten. ^^
Mit Zitat antworten
  #8 (permalink)  
Alt 22-01-2008, 23:37
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Und was ist wenn du im Natursprachlichen Modus den Score noch mal zusätzliche selektierst beziehungsweise selber danach sortierst? Welche Fehlermeldungen tauchen auf?
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
Antwort

Lesezeichen


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

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

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
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
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:40 Uhr.