Ik ben wat aan het stoeien met MySQL, ik ben een zoekfunctie aan het maken. Daarvoor maak ik gebruik van FULLTEXT-searches. Ik voer een zoekquery uit, die er als volgt uitziet:
Dat gaat prima, ik krijg keurig een aantal rows terug, gesorteerd op content_search. Het leek mij echter handig als ook in de titel gezocht zou worden. Dat is ook prima gelukt, simpelweg een nieuwe MATCH toevoegen was geen punt.
Ik bedacht me echter, dat het wellicht het makkelijkst was om vervolgens in de query de twee teruggekregen relevanties bij elkaar op te tellen, en daar op te sorteren. Op die manier komen de beste matches (waarbij zowel in de content als de titel gematcht is) bovenaan te staan.
Ik dacht daarbij deze query te kunnen gebruiken:
Ik krijg daarbij echter de volgende fout:
Ik denk dat dit komt, omdat content_search een alias is. Ik weet echter niet hoe dit is te omzeilen, is dit wel mogelijk? Of zet ik het wellicht op een verkeerde plek? Ik heb wat gezocht op Google, maar ik kon nergens vinden dat een alias verder niet te gebruiken is, maar ook niet dat het wél kan. Ik hoop dat iemand hier mij uit de brand kan helpen.
EDIT:
Tsja, en daar ga maak je weer een gigantische schuiver. Toen ik verder ging zoeken kwam ik dit keer iets tegen waar ik eerdere keren overheen had gelezen:
SQL:
1
2
3
4
5
6
7
8
9
| SELECT id, MATCH ( content ) AGAINST ( 'keyword' ) AS content_search FROM topics ORDER BY content_search DESC |
Dat gaat prima, ik krijg keurig een aantal rows terug, gesorteerd op content_search. Het leek mij echter handig als ook in de titel gezocht zou worden. Dat is ook prima gelukt, simpelweg een nieuwe MATCH toevoegen was geen punt.
Ik bedacht me echter, dat het wellicht het makkelijkst was om vervolgens in de query de twee teruggekregen relevanties bij elkaar op te tellen, en daar op te sorteren. Op die manier komen de beste matches (waarbij zowel in de content als de titel gematcht is) bovenaan te staan.
Ik dacht daarbij deze query te kunnen gebruiken:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| SELECT name, id, MATCH ( content ) AGAINST ( 'keyword' ) AS content_search, MATCH ( name ) AGAINST ( 'keyword' ) AS name_search, ( content_search + name_search ) AS total_relevance FROM topics ORDER BY name_search DESC |
Ik krijg daarbij echter de volgende fout:
#1054 - Unknown column 'content_search' in 'field list'
Ik denk dat dit komt, omdat content_search een alias is. Ik weet echter niet hoe dit is te omzeilen, is dit wel mogelijk? Of zet ik het wellicht op een verkeerde plek? Ik heb wat gezocht op Google, maar ik kon nergens vinden dat een alias verder niet te gebruiken is, maar ook niet dat het wél kan. Ik hoop dat iemand hier mij uit de brand kan helpen.
EDIT:
Tsja, en daar ga maak je weer een gigantische schuiver. Toen ik verder ging zoeken kwam ik dit keer iets tegen waar ik eerdere keren overheen had gelezen:
Het kan blijkbaar niet in de SELECT clause gebruikt worden. Dan moet ik het anders oplossen.A select_expr can be given an alias using AS alias_name. The alias is used as the expression's column name and can be used in GROUP BY, ORDER BY, or HAVING clauses.
[ Voor 12% gewijzigd door Patriot op 04-06-2008 22:21 ]