[MySQL] Alias gebruiken verderop in de query?

Pagina: 1
Acties:

  • Patriot
  • Registratie: December 2004
  • Laatst online: 20:16

Patriot

Fulltime #whatpulsert

Topicstarter
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:

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:
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.
Het kan blijkbaar niet in de SELECT clause gebruikt worden. Dan moet ik het anders oplossen.

[ Voor 12% gewijzigd door Patriot op 04-06-2008 22:21 ]


  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20:42
Condities aan aliassen kan je opgeven met behulp van het HAVING keyword :)

Zie de documentatie voor de details ;)

[ Voor 22% gewijzigd door Morax op 04-06-2008 22:45 ]

What do you mean I have no life? I am a gamer, I got millions!


  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 02-11 22:07

Wiebbe

<none />

Vergeet ook niet dat hij pas de alias kent als de tabel is opgebouwd. Dus je kan ze niet gebruiken in de SELECT omdat ze dan nog niet bestaan :P

Oh noes.. No more TreinTijden :(


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
En vergeet ook niet dat als de tabel is opgebouwd dat je dan al bijna gelijk met een carthesisch product zit en dat je dus als je niet oppast een goede hoeveelheid geheugen mag meebrengen.