[mysql] full-text search met meerdere tabellen

Pagina: 1
Acties:

  • Lurge
  • Registratie: Maart 2000
  • Niet online

Lurge

ActueleWind

Topicstarter
Ik heb een aantal tabellen die hetzelfde zijn (qua opmaak). Hierin wil ik dus een full-text search doen. Ik had op de mysql site wel deze query gezien maar ik vraag me af hoe ik dit kan doen met meerdere tabellen.
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');
Weet iemand hoe dat zit?

ActueleWind


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Euh kan je niet iets als

select ... match velden against (), match anderen against (), doen ?

En in je where ipv een , een AND ertussen?
En uiteraard in je from de beide tabellen.

Anders kan je de resultaten in 2 losse (temporary) tables plaatsen en daaruit de intersection vissen.

  • Lurge
  • Registratie: Maart 2000
  • Niet online

Lurge

ActueleWind

Topicstarter
ik heb nu een simpele versie van die querie gebruikt.
SELECT testtabel.naam,testtabel2.naam,testtabel2.tekst,testtabel.tekst FROM testtabel,testtabel2 WHERE MATCH (testtabel.naam,testtabel2.naam,testtabel2.tekst,testtabel.tekst) AGAINST ('contact');
Maar dit geeft: ERROR 1105: Unknown error
maar als ik de query zo maak dat ik alleen de gegevens uit 1 tabel MATCH doet ie het wel:
SELECT testtabel.naam,testtabel2.naam,testtabel2.tekst,testtabel.tekst FROM testtabel,testtabel2 WHERE MATCH (testtabel.naam,testtabel.tekst) AGAINST ('contact');

ActueleWind


  • Lurge
  • Registratie: Maart 2000
  • Niet online

Lurge

ActueleWind

Topicstarter
kan dit niet of is dit een bug in mysql ?

ActueleWind


  • Bartholomew
  • Registratie: Januari 2000
  • Laatst online: 12-04 12:56
Fulltext search is niet mogelijk op meerdere tabellen zie MySQL doc:

6.8.1 Fulltext Restrictions
All parameters to the MATCH function must be columns from the same table that is part of the same fulltext index, unless this MATCH is IN BOOLEAN MODE.

  • Lurge
  • Registratie: Maart 2000
  • Niet online

Lurge

ActueleWind

Topicstarter
hoe kan ik dit oplossen?? Iemand een idee??

ActueleWind


  • Bartholomew
  • Registratie: Januari 2000
  • Laatst online: 12-04 12:56
Je kunt het ook zo doen:

SELECT * WHERE blah LIKE '%$zoek_criteria%' AND blah2 LIKE '%$zoek_criteria%'

etc

Maar let wel op als iemand zoekt op meerdere woorden moet je die even uitelkaar slopen en appart in je WHERE zetten. Hier is een voorbeeld van een search op 2 tabellen die ik net een paar dagen geleden heb gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
// If multiple words, separate them and put LIKE in between
$array=explode(" ",$search_string);
$search_string1=implode($array,"%' AND topic_body LIKE '%");
$search_string2=implode($array,"%' AND topic_subject LIKE '%");
$search_string3=implode($array,"%' AND msgs.msg_body LIKE '%");    

$result = mysql_query("
    SELECT DISTINCT *
    FROM topics INNER JOIN msgs ON topics.topic_id=msgs.topic_id 
    WHERE ((topic_body LIKE '%$search_string1%') 
        OR (topic_subject LIKE '%$search_string2%') 
        OR (msgs.msg_body LIKE '%$search_string3%')) 
    GROUP BY topics.topic_id
    ORDER BY topic_date DESC",$db);
?>
Pagina: 1