Toon posts:

[mySQL] IN of LIKE op keywords *

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een tabel met een veld keywords

keywords bevat "auto fiets hond"

Iemand zoekt op "auto" of "boot" of "kat" bijv hoe kan ik dan toch diegene met "hond" als gevonden item beschouwen

ik heb nu WHERE keyword IN('auto','boot','kat') maar dan heb je het over 1 woord toch als 'auto fiets hond' in de string van IN zou zitten zou ik wel resultaat hebben


zou iemand mij hier even mee kunnen helpen want ik kom er niet uit

Alvast bedankt

  • Rac-On
  • Registratie: November 2003
  • Niet online
ik snap niet helemaal precies wat je bedoel, maar als ik het goed begrijp heb je een tabel waarin keywords staan, bijvoorbeeld om artikelen oid op te zoeken?

Wat je beter kan doen is 1 tabel met keywords, waarin je 1 woord per record doet. Vervolgens een relatietabel waarin je aangeeft wel keywordt bij welk artikel hoort. Dan kun je vervolgens een like gebruiken.

Voor zover ik weet is wat jij wil ("auto fiets hond" matchen met "auto boot kat") in sql niet mogelijk.

doet niet aan icons, usertitels of signatures


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 21:50

Maasluip

Kabbelend watertje

Als je
SQL:
1
2
3
select *
from TABLE
where FIELD IN ('auto','boot','kat')
doet dan vind je alle records waar FIELD gelijk aan 'auto' of 'boot' of 'kat' is, niet waar FIELD bestaat uit 'auto' of 'boot' of 'kat', 'automobiel' zul je dus niet vinden, daar moet je weer een LIKE voor gebruiken.

Signatures zijn voor boomers.


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Je snapt niet helemaal wat een IN doet geloof ik...

http://www.w3schools.com/sql/sql_in.asp

Check daar eens :) (hey weer een W3schools link :P)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je hebt een slecht datamodel. Waarom sla je al die keywords in hetzelfde veld op?
Je kan het beter oplossen door wat rac-on al gezegd heeft.

https://fgheysels.github.io/


  • lier
  • Registratie: Januari 2004
  • Laatst online: 08:06

lier

MikroTik nerd

Inderdaad de Like '%...%' gebruiken

Waarom heb je een veld met keywoards ?
Lijkt me niet echt de goedkoopste oplossing ?

De IN wordt gebruikt als je meerdere vergelijkingen tegelijk wil doen:

veld = '1' OR
veld = '2' OR
veld = '3'

komt overeen met

veld IN ('1','2','3')

[ Voor 43% gewijzigd door lier op 12-02-2004 09:32 ]

Eerst het probleem, dan de oplossing


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

whoami schreef op 12 februari 2004 @ 09:28:
Je hebt een slecht datamodel. Waarom sla je al die keywords in hetzelfde veld op?
Je kan het beter oplossen door wat rac-on al gezegd heeft.
Mwah.. Ik sla keywords ook in 1 veld op. Ligt er maar net aan wat je er mee wilt doen. Zet er een FULLTEXT op en je kunt makkelijk zoeken op keyword. En het maakt niet uit hoe gebruikers het invullen (komma-gescheiden, spatie-gescheiden, whatever).

[ Voor 12% gewijzigd door Bosmonster op 12-02-2004 09:39 ]


Verwijderd

Bosmonster wat wordt dan de sql query? ik heb een veld met flash, dreamweaver, office

ik wil met een sql query zoeken naar dreamweaver dus zo:
SELECT Count(*) AS dreamweaver
FROM stuklijst
WHERE (((stuklijst.software)='dreamweaver'));

wat wordt dan de query?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 12 februari 2004 @ 10:18:
Bosmonster wat wordt dan de sql query? ik heb een veld met flash, dreamweaver, office

ik wil met een sql query zoeken naar dreamweaver dus zo:
SELECT Count(*) AS dreamweaver
FROM stuklijst
WHERE (((stuklijst.software)='dreamweaver'));

wat wordt dan de query?
Dat hangt ervan af welk DBMS je gebruikt. Kijk eens in je manual, en zoek eens op de fulltext mogelijkheden.

Maar dan nog, vind ik het een slecht datamodel. Wat als je nu alle records wilt vinden die als keyword 'office' hebben?
Je kan het dan wel met fulltextsearch doen, maar ik denk dat dat toch significant trager zal zijn dan op de andere manier.
Nuja, 't hangt allemaal af van 'the big picture'. Maar je mag je niet blind blijven staren op de oplossing die je tot nu toehebt; zeker niet als dat uit gemakzucht is.

https://fgheysels.github.io/


Verwijderd

Topicstarter
lier schreef op 12 februari 2004 @ 09:29:
Inderdaad de Like '%...%' gebruiken

Waarom heb je een veld met keywoards ?
Lijkt me niet echt de goedkoopste oplossing ?

De IN wordt gebruikt als je meerdere vergelijkingen tegelijk wil doen:

veld = '1' OR
veld = '2' OR
veld = '3'

komt overeen met

veld IN ('1','2','3')
ok ik moet dus een tabel maken keywords
met veld
- id
- keyword

ik zet dus in tabel relatie.keyword iets van '1,5,6'

en wat word dan mijn query ?
zoiets als
code:
1
SELECT keywords.keyword FROM keywords WHERE keyword LIKE'%$keyword%'

hier even list van maken en dan
code:
1
SELECT relatie.* FROM relatie, keywords WHERE relatie.keyword IN ('1','5','6')

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
In je relatie tabel zet je niet iets van 1, 5, 6 ofzo, want dan heb je gewoon nog altijd hetzelfde probleem.
Je relatie-tabel moet er als volgt uit zien:

record_id, keyword_id

Voor ieder keyword dat een bepaald record dus heeft, maak je een record in die relatie-tabel.

Misschien kan je eens een tutorial opduikelen over normaliseren enzo. (Je vindt er eentje in de P&W FAQ onder het SQL gedeelte).

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 12 februari 2004 @ 11:35:
In je relatie tabel zet je niet iets van 1, 5, 6 ofzo, want dan heb je gewoon nog altijd hetzelfde probleem.
Je relatie-tabel moet er als volgt uit zien:

record_id, keyword_id

Voor ieder keyword dat een bepaald record dus heeft, maak je een record in die relatie-tabel.

Misschien kan je eens een tutorial opduikelen over normaliseren enzo. (Je vindt er eentje in de P&W FAQ onder het SQL gedeelte).
tja dat normaliseren dat vat ik wel

ik dacht eerder aan de tabel 'keywords' hetvolgende te maken:

id , relatie_id, keywords

manier van SELECT is bekent

is dit zo wat want dan kan van mij part keywordveld weg bij relatie

[ Voor 5% gewijzigd door Verwijderd op 12-02-2004 11:44 ]

Pagina: 1