Toon posts:

[mysql] fulltext lukt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben bezig met de admin area van een site, en een van die delen is admin_article waar je eerst een overzichtje krijgt van de articles, en waar je ook kan zoeken naar articles, adh van auteur, categorie, datum etc.

Nu wou ik ook laten zoeken met keywords, dus heb ik de velden aName en aText als FULLTEXT ingesteld in MySQL. (aName is de title van het artikel, en aText de tekst zelf uiteraard)

Nu heb ik het volgende:
PHP:
1
2
3
4
5
6
<?
//keyword search
if ($searchField != "") {
    $keywordSearch = "MATCH $searchField AGAINST ('$keywords')";
}
?>

In het stukje hierboven wordt dus een onderdeel van de query gebouwd om te zoeken op article. $searchField heeft de gebruiker in een form gekozen, en is ofwel "a.aName" of "a.aText" of "a.aName, a.aText".

de query:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
        echo $articlesQ = "SELECT a.aid,
                             a.aName,
                             a.aDate,
                             a.visible,
                             au.auName,
                             c.cName,
                             $keywordSearch AS score
                     FROM article a, author au, category c
                     WHERE a.auid = au.auid
                       AND a.cid = c.cid
                       AND $idSearch
                       AND $authorSearch
                       AND $categorySearch
                       AND $dateSearch
                       AND $visibilitySearch
                       AND $keywordSearch
                     ORDER BY $order";
        $articlesR = mysql_query($articlesQ);
?>

al die andere AND clauses zijn dus andere zoekspullen. Als er geen zoekopdracht is gegeven is elk van deze variabelen 1 zodat je krijgt "WHERE 1 AND 1 AND 1" etc.

de error die ik krijg:
Warning: Supplied argument is not a valid MySQL result resource in D:\PixelCoders/admin/admin_article.php on line 412

en ten slotte de ge-echode query als ik zoek in de tekst op 'woei'
code:
1
2
3
4
SELECT a.aid, a.aName, a.aDate, a.visible, au.auName, c.cName, MATCH a.aText AGAINST ('woei') AS score 
FROM article a, author au, category c 
WHERE a.auid = au.auid AND a.cid = c.cid AND 1 AND 1 AND 1 AND 1 AND 1 AND MATCH a.aText AGAINST ('woei') 
ORDER BY aid

wat is nu fout? ik draai MySQL boven versie 3.23.23 dus FULLTEXT support zit er al in.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

uhhhhh doe eens mysql_error(); :?

Klaar voor een nieuwe uitdaging.


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Waarom doe je de AND niet ook in de variabele of nog beter, waarom bouw je de hele where clause niet gewoon op. Dat voorkomt de 1 and 1 and 1...

Verwijderd

Topicstarter
Op zondag 06 januari 2002 18:22 schreef chem het volgende:
uhhhhh doe eens mysql_error(); :?
ow, ja idd. Hij zegt "Can't find FULLTEXT index".

Ik heb die indexen gemaakt in PhpMyAdmin, en daar krijg ik als index overzicht:

Indices :
code:
1
2
3
4
Sleutelnaam    Type Cardinality    Veld 
PRIMARY   PRIMARY   3         aid  
aName       FULLTEXT  None       aName 
                            aText  1

Verwijderd

Topicstarter
Op zondag 06 januari 2002 21:19 schreef Goodielover het volgende:
Waarom doe je de AND niet ook in de variabele of nog beter, waarom bouw je de hele where clause niet gewoon op. Dat voorkomt de 1 and 1 and 1...
das een idee, maar die eentjes zijn geen probleem want zonder die fulltext werkte het wel.

Verwijderd

Topicstarter
hmz.. kan het zijn dat de velden waarin je zoekt overeen moeten komen met je index. Ik bedoel, ik heb een index gemaakt (aName,aText), maar moet ik nu zoeken met
MATCH (aName,aText) AGAINST ***

of kan ik ook

MATCH aName AGAINST ***

gebruiken en hetzelfde voor aText.

In dat eerste geval krijg ik nl geen error. Is er een verschil of ik dan een index (aName,aTitle) maak, of twee indices (aName) en (aText) of is dat iets totaal verschillend?

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Moet je die fulltext index niet een aparte naam naam geven en daar tegen zoeken? Ik weet het niet hoor en eerlijk gezegd ben ik nu te lui om voor je te gaan zoeken op mysql.com

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op zondag 06 januari 2002 21:39 schreef Jppr het volgende:
hmz.. kan het zijn dat de velden waarin je zoekt overeen moeten komen met je index. Ik bedoel, ik heb een index gemaakt (aName,aText), maar moet ik nu zoeken met
MATCH (aName,aText) AGAINST ***

[...]
Ja dus. Ik heb nu toch maar even gekeken op http://www.mysql.com/doc
Het staat er gewoon. Ben je er nu al uit? Meld je dat dan ook even?

Verwijderd

Topicstarter
ja, sorry. Nu ik weet dat het enkel op aName,aText kan en niet apart lukt het.

Bedankt voor de hulp.
Pagina: 1