php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.12.2010, 23:36  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 212
stayInside befindet sich auf einem aufstrebenden Ast
Standard SQL Suchabfrage

Moinsen,

ich hänge gerade an einem Problem bei einer SQL Abfrage. Und zwar bastel ich gerade eine Suchmaschine (überwiegend zum lernen).

Und zwar habe ich folgende 3 Tabellen

======================

Tabelle: document
Felder: Id, Content

1; Dies ist ein Dokument über AMD
2; Dies ist ein Dokument über AMD und die Radeon 5770 die bekannt von AMD stammt.

======================

Tabelle: word
Felder: Id, Word

1;dies
2;ist
3;ein
4;dokument
5;über
6;amd
7;und
8;die
9;radeon
10;5770
12;bekannt
13;von
14;stammt

======================

Tabelle: document_has_word
Felder: WordId, DocumentId

1;1
2;1
3;1
4;1
5;1
6;1
1;2
2;2
3;2
4;2
5;2
6;2
7;2
8;2
9;2
12;2
13;2
14;2

In der document_has_word stehen also alle Verknüpfungen drin, welches Dokument welche Wörter beinhaltet.

Wenn nach nur 1 Wort gesucht wird ist es kein Problem. Allerdings soll man aber auch Teile der boolsche Suche nutzen können => amd +radeon. Es sollen also alle Dokumente gefunden werden wo das Wort "AMD" und "Radeon" drin sind.

Mein aktueller Query sieht wie folgt aus:

PHP-Code:
SELECT DocumentIdCount(WordId) as total FROM
document_has_word 
WHERE 
WordId IN
(SELECT Id from word
WHERE Word 
'AMD' OR Word 'Radeon')
GROUP BY DocumentId HAVNIG total 
Die 2 bei Having entspricht die Anzahl der Suchwörter. Allerdings gefällt mir diese Lösung irgendwie noch nicht. Hat jemand eine bessere Lösung (oder nützliche Links (das Tutorial von phpbar nutzt nicht die Verknüpfungstabelle wie ich sie benutze))?

Gruß
stayInside ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.12.2010, 00:27  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

Wieso machst du nicht einfach nur eine Abfrage mit LIKE? Die Tabellen word und document_has_word braucht man doch gar nicht, oder? Vielleicht kannst du auch eine Volltextsuche machen.
coola ist offline   Mit Zitat antworten
Alt 11.12.2010, 09:37  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

[MOD: Thread verschoben]
Asipak ist offline   Mit Zitat antworten
Alt 11.12.2010, 13:39  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Eine Volltext Sucher wäre in dem Falle sinvoller als mit Like zu arbeiten. Am besten benutzt man dann in der Abfrage MATCH() AGAINST().

Die zwei Tabellen so sind nicht effektiv.

Gruß Litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 11.12.2010, 15:23  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 212
stayInside befindet sich auf einem aufstrebenden Ast
Standard

MATCH AGAINST soll ab 1. Mio. Einträge allerdings Performance-Einbußen mitsich bringen. Und da die 1 Mio Einträge schnell geknackt werden, möchte ich gerne von Anfang an eine gut durchdachte Struktur haben. Ich habe die die Beispiele von phpbar nochmal angeschaut und ein guten Query zusammen gebastelt. Hier mal ein Beispiel mit 3 Suchwörtern die mit AND verknüpft werden.

Dieser Query würde zum Beispiel für folgende Suchphrase passen: "amd +daten* -nvidia" (Reihenfolge stimmt nicht mit Query überein)

PHP-Code:
SELECT index_0.DocumentId AS DocumentId,
           
index_0.WordCount  AS WordCount,
           
index_1.WordCount  AS WordCount_1,
           
index_2.WordCount  AS WordCount_2

      FROM document_has_word 
AS index_0,
           
word AS word_0,

           
document_has_word AS index_1,
           
word AS word_1,

           
document_has_word AS index_2,
           
word AS word_2

     WHERE 1

       
AND word_0.Id index_0.WordId
       
AND word_0.Word LIKE 'daten%'

       
AND index_0.DocumentId index_1.DocumentId

       
AND word_1.Id index_1.WordId
       
AND word_1.Word 'amd'

       
AND index_1.DocumentId index_2.DocumentId

       
AND word_2.Id index_2.WordId
       
AND word_2.Word != 'nvidia'

  
GROUP BY DocumentId
  ORDER BY WordCount DESC
WordCount_1 DESCWordCount_2 DESC 
Der Vorteil von dem Query ist, das ich dort sowohl mit 1 Wort als auch mit x Wörtern suchen kann. Desweiteren kann ich mit AND (+) oder NOT In (-) suchen. Und Wildcards funktionieren auch, wenn man den LIKE Operator nutzt.
stayInside ist offline   Mit Zitat antworten
Alt 11.12.2010, 15:42  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Bitte unterlass in Zukunft Crosspostings oder poste die entsprechenden Links auf die anderen Beiträge.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] sql query mit variablen? Helix PHP Einsteiger 6 08.12.2010 11:19
Use The Index, Luke! - SQL Tuning Resource Markus Winand Datenbanken 0 04.12.2010 11:12
[Erledigt] sql query nochmal filtern gersh PHP Einsteiger 30 02.12.2010 22:30
xml zu sql? iceteea PHP Einsteiger 6 01.12.2010 12:22
[Erledigt] PHP Formular Daten aus SQL in DropDown Seebär PHP Einsteiger 7 26.11.2010 16:48
False Abfrage und SQL hängt sich auf marc77 Datenbanken 4 22.11.2010 14:57
[Erledigt] Datum, SQL Tabelle , Format ändern schlapphut PHP Tipps 2010 9 12.11.2010 15:10
SQL Intervall // Format übergeben noop PHP Tipps 2010 6 11.11.2010 12:32
Hilfe zu "You have an error in your SQL syntax" Eckotec PHP Tipps 2010 13 10.11.2010 23:30
[Erledigt] sql abfrage mit Tabelle in der $ Zeichn vorkommt dior Datenbanken 5 09.11.2010 13:05
SQL Datei mit PHP ausführen Kein Genie PHP Tipps 2010 2 09.11.2010 09:52
Sqlite - Suchabfrage eines Teilstrings skerge12 Datenbanken 8 31.10.2010 22:24
Scriptsuche [Erledigt] Script für Suchabfrage webbits Scriptbörse 0 12.04.2010 20:30
[Erledigt] Bitte um Rat bei einer Suchabfrage ePole PHP Tipps 2010 6 18.02.2010 15:18
Problem mit Suchabfrage Datenbanken 2 29.06.2005 09:55

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql suchabfrage, sql suchabfrage php, suchabfrage sql, sql abfrage in word 2010, word 2010 sql abfrage problem, suchabfrage sql mit php, php suchabfrage, sql suchabfragen mit php, php sql suchabfrage, word 2010 sql, suchen nach begriffen in ordern bei word 2010, query in suchabfrage, sql suchabfrage filter, word 2010 sql abfrage, sql suchabfrage variable, 1 mio einträge sql abfrage, sql tabelle mit 1 millionen einträge, php sql like operator mit variable, suchabfragen sql, sql suchabfrage im formular

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum