php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.11.2011, 14:18  
Neuer Benutzer
 
Registriert seit: 25.07.2011
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
geneticZ befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Frage zu Volltexte-Suche MATCH / AGAINST

Hallo,
ich habe eine DB mit mehreren Tabellen (ca. 15). Die Verknüpfung der Tabellen findet über einen Foreign_Key namens Object_UId statt. Nun möchte ich eine Volltext-Suche über alle Tabellen laufen lassen können.

Die wichtigen Spalten der Tabellen wurden bereits mit einem FULLTEXT Index belegt und wenn ich die Suche nur in einer (egal in welcher) Tabelle abfrage, funktioniert auch alles Wunderbar!
PHP-Code:
$ergebnis mysql_query("SELECT Object_UId FROM Attribution
                                     WHERE MATCH (Name, OtherName) 
                                     AGAINST ('$search_input' IN BOOLEAN MODE)"
);
                                        
while(
$row mysql_fetch_object($ergebnis)) {
        if (!
in_array($row->Object_UId$searchArr)) {
              
$searchArr[] = $row->Object_UId;
    }

Nur wie bekomme ich alle Tabellen unter einen Hut? Das ist mir jetzt noch nicht so wirklich klar. Die Problematik ist ja erstmal dass jede Tabelle die Spalte Object_UId hat. Was ich probiert habe war dann die jeweilige Zuweisung mit einem Punkt und dem Tabellen-Namen, das hat in MySQLWorkbench auch gut geklappt aber leider nicht in PHP...
Hier mal mein Versuch:
PHP-Code:
$ergebnis mysql_query("SELECT Attribution.Object_UId, Metadata.Object_UId 
                FROM Attribution, Metadata
                WHERE MATCH (Attribution.Name, Attribution.OtherName) 
                                AGAINST ('$search_input' IN BOOLEAN MODE)
                OR MATCH (Metadata.Creator) 
                                AGAINST ('$search_input' IN BOOLEAN MODE"
);
                                        
while(
$row mysql_fetch_object($ergebnis)) {
    if (!
in_array($row->Attribution.Object_UId$searchArr)) {
        
$searchArr[] = $row->Attribution.Object_UId;
    }

    if (!
in_array($row->Metadata.Object_UId$searchArr)) {
        
$searchArr[] = $row->Metadata.Object_UId;
    }

Hat da jemand ne Ahnung wie man sowas am geschicktesten macht?
Ein paar andere Dinge sind mir auch noch unklar, aber ich belasse es jetzt erstmal hierbei!

Vielen Dank für die Hilfe im Voraus!
Beste Grüße
geneticZ
geneticZ ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.11.2011, 14:24  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

hm - für deine Volltextsuche ist der Fremdschlüssel eigentlich VÖLLIG uninteressant. Von daher hast du eigentlich die gleiche Suche über alle Tabellen vor dir, die unabhängig sind ...

also wenn das in einer Abfrage erfolgen soll, könntest du mit UNION arbeiten

Code:
  SELECT Object_UId FROM Attribution
    WHERE MATCH (Name, OtherName) 
      AGAINST ('$search_input' IN BOOLEAN MODE)  
UNION
  SELECT Object_UId FROM Metadata
    WHERE MATCH (Metadata.Creator) 
      AGAINST ('$search_input' IN BOOLEAN MODE)
UNION 
    .... nächste Tabelle
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 28.11.2011, 14:29  
Neuer Benutzer
 
Registriert seit: 25.07.2011
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
geneticZ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von eagle275 Beitrag anzeigen
hm - für deine Volltextsuche ist der Fremdschlüssel eigentlich VÖLLIG uninteressant. Von daher hast du eigentlich die gleiche Suche über alle Tabellen vor dir, die unabhängig sind ...

also wenn das in einer Abfrage erfolgen soll, könntest du mit UNION arbeiten

Code:
  SELECT Object_UId FROM Attribution
    WHERE MATCH (Name, OtherName) 
      AGAINST ('$search_input' IN BOOLEAN MODE)  
UNION
  SELECT Object_UId FROM Metadata
    WHERE MATCH (Metadata.Creator) 
      AGAINST ('$search_input' IN BOOLEAN MODE)
UNION 
    .... nächste Tabelle
Hallo und Danke für die Antwort!
Für die Suche ist der Fremdschlüssel unwichtig, aber ich benötige ihn als Ergebnis der Suchabfrage. UNION probiere ich gleich mal aus!

Eine andere Frage, wobei die unter Umständen etwas dämlich ist, aber ich will nur sicher gehen. Eine Möglichkeit einfach mit '*' möglichst alle Tabellen und alle Spalten zu durchsuchen gibt es nicht oder?

Also sowas wie:
PHP-Code:
SELECT FROM AttributionMetadata
WHERE MATCH 
(*) 
AGAINST ('$search_input' IN BOOLEAN MODE
geneticZ ist offline   Mit Zitat antworten
Alt 28.11.2011, 14:41  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

nein .. * ist nur bei SELECT zulässig mit der Bedeutung "liefere mir ALLE Spalten" - aber auch dort ist es verpönt - man soll aus Gründen der Sparsamkeit genau die Spaltennamen auflisten, die man auch wirklich braucht .. im WHERE -Teil dagegen muss man die Spalten exakt angeben .. da ist kein * zulässig
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 28.11.2011, 14:47  
Neuer Benutzer
 
Registriert seit: 25.07.2011
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
geneticZ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von eagle275 Beitrag anzeigen
nein .. * ist nur bei SELECT zulässig mit der Bedeutung "liefere mir ALLE Spalten" - aber auch dort ist es verpönt - man soll aus Gründen der Sparsamkeit genau die Spaltennamen auflisten, die man auch wirklich braucht .. im WHERE -Teil dagegen muss man die Spalten exakt angeben .. da ist kein * zulässig
Ok, dachte ich mir schon!
Mit UNION funktioniert alles einwandfrei! Vielen Dank!
geneticZ 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
Frage zum Aufbau einer Suche axelf PHP Einsteiger 5 19.07.2011 21:10
SQL Suchabfrage mit LIKE oder MATCH AGAINST?? MaNuu Datenbanken 4 27.02.2011 14:42
MATCH AGAINST Abfrage Problem mathias_vie Datenbanken 3 26.11.2010 16:19
Suche einfaches Frage "Captcha" thomas108 Scriptbörse 8 07.09.2009 20:21
Frage und Bewertung Scripte Kriw Scriptbörse 1 13.12.2008 14:54
Problem mit foren suche programmieren! litterauspirna PHP Tipps 2008 4 17.08.2008 12:17
MATCH .... AGAINST ... Problem Denise Datenbanken 4 21.03.2007 20:05
Frage zu einer Suche accomm PHP Tipps 2006 6 12.05.2006 19:15
Frage zur phpbb Suche 2wuck PHP Tipps 2006 4 09.05.2006 21:34
Match ... Against... einzeln oder gesammten string? EvilDragon Datenbanken 2 06.02.2006 14:49
[Erledigt] Erweiterung der Suche PHP Tipps 2007 2 01.12.2005 19:30
Frage: Suche Fehler in diesem Script... PHP Tipps 2005-2 14 25.10.2005 19:24
Volltextsuche mit MATCH AGAINST über mehere Tabellen? Datenbanken 5 13.09.2005 15:02
Suche + Frage: php4 extensions --> mssql.so PHP Tipps 2005-2 4 04.08.2005 17:08
match .. against Mutatos Datenbanken 1 29.03.2005 16:42

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
suchematch, php volltextsuche punkt, php suche match statt like, match against punkt

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:47 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