[MySQL / PHP 5] Zoeken met Wildcard

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kvn
  • Registratie: Maart 2001
  • Laatst online: 20-09 23:30
Ik zit met het volgende probleem;

Ik wil uit de tabel gt_products alle producten die een productnaam hebben die met "T" beginnen uitlezen.

Google leverde me de volgende handleiding op;

http://dev.mysql.com/doc/mysql/en/fulltext-boolean.html


Maar met de methodes die ik hier gebruik in een query

code:
1
SELECT * FROM gt_products WHERE MATCH (productName) AGAINST ('T*' IN BOOLEAN MODE)


Krijg ik alle resultaten waar een T in voorkomt, en niet waar deze mee begint.

code:
1
SELECT * FROM gt_products WHERE MATCH (productName) AGAINST ('+T*' IN BOOLEAN MODE)


leverd ook niks op. Wat zou ik hiervoor kunnen proberen?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom gebruik je fulltext searches als je ook gewoon een like-query kan nemen in dit geval?
SQL:
1
SELECT * FROM `gt_products` WHERE LCASE(`productName`) LIKE 't%'

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Kvn
  • Registratie: Maart 2001
  • Laatst online: 20-09 23:30
-NMe- schreef op vrijdag 12 augustus 2005 @ 19:10:
Waarom gebruik je fulltext searches als je ook gewoon een like-query kan nemen in dit geval?
SQL:
1
SELECT * FROM `gt_products` WHERE LCASE(`productName`) LIKE 't%'
LIKE had ik al geprobeerd naar voorbeelden maar dat deed ik dus niet helemaal goed ( productName ipv LCASE('productName') ). Bedankt! :)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

-NMe- schreef op vrijdag 12 augustus 2005 @ 19:10:
Waarom gebruik je fulltext searches als je ook gewoon een like-query kan nemen in dit geval?
SQL:
1
SELECT * FROM `gt_products` WHERE LCASE(`productName`) LIKE 't%'
Tenzij het tekstveld binair is ingesteld voegt die LCASE weinig toe, de boel is sowieso case-insensitive dan.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

ACM schreef op vrijdag 12 augustus 2005 @ 19:30:
Tenzij het tekstveld binair is ingesteld voegt die LCASE weinig toe, de boel is sowieso case-insensitive dan.
Hmm, nooit geweten. Heb het uit gewoonte eigenlijk altijd zo gedaan. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

-NMe- schreef op vrijdag 12 augustus 2005 @ 19:37:
Hmm, nooit geweten. Heb het uit gewoonte eigenlijk altijd zo gedaan. :P
Dus uit gewoonte mankeer je een toch al slome query, zodanig dat ie ook nog eens geen index kan gebruiken? ;)
Tenzij je een functionele index op die productname bedacht had is sowieso dit waarschijnlijk sneller:
WHERE productName LIKE 't%' OR productName LIKE 'T%'

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Volgens mij moet je standaard woorden van minimaal 3 karakters gebruiken... dit kun je dus anders instellen in je my.cnf of zo...

Acties:
  • 0 Henk 'm!

  • Vold
  • Registratie: September 2001
  • Laatst online: 22-01 23:04
Slagroom schreef op vrijdag 12 augustus 2005 @ 21:36:
Volgens mij moet je standaard woorden van minimaal 3 karakters gebruiken... dit kun je dus anders instellen in je my.cnf of zo...
Klopt:

The default value of minimum character length (which is 4) can be modified. It's #defined as ft_min_word_len at myisam/ft_static.c of you sources.
Of course you can always use mysql variables (read http://dev.mysql.com/doc/mysql/en/Fulltext_Fine-tuning.html)

Dit moet er ergens staan als het goed is:

[mysqld]
ft_min_word_len=3

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Slagroom schreef op vrijdag 12 augustus 2005 @ 21:36:
Volgens mij moet je standaard woorden van minimaal 3 karakters gebruiken... dit kun je dus anders instellen in je my.cnf of zo...
Ten eerste gaat het al niet meer over fulltext search maar over de good-old LIKE, en ten tweede gaat die ft_min_word length niet over de minimale lengte van het zoekwoord, maar over de lengte van gevonden resultaten. 't*' met een ft_min_word_length=3 vindt dus geen "tak" maar wel "taak".
Pagina: 1