Toon posts:

[sql] zoeken binnen een veld

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb nouw deze query:

SELECT Count(*) AS dreamweaver
FROM stuklijst
WHERE (((stuklijst.software)='office'));

de tabel stuklijst ziet er alsvolgt uit
stuklijst
------------------------------
id | software

ik heb in het veld software staan: office, dreamweaver, flash

Ik wil dus dat hij met die sql query het veld software doorzoekt op het woord office. Op het moment dat in het veld alleen office staat dan gaat het goed. Op moment dat er: office, flash staat ziet hij het woord office niet en telt hij hem niet mee.

hoe kan ik dit wel zo maken dat het wel goed werkt?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Het lijkt erop dat je data model niet goed genormaliseerd is.

Kijk een hier: mySQL : IN of LIKE daar staat een voorstel voor een beter datamodel.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Inderdaad, je hebt namelijk een tabel:
Table :software
ID
CategorieID
Naam
Key
etc.

Table :Categorie
CategorieID
CategorieNaam

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
oke het klopt dat mischien de tabel niet 100% goed is maar. Ik vul de tabel door middel van een asp formulier. Ik kan in dit formulier meerdere items voor het veld software selecteren je krijgt dus: dreamweaver, office, flash.

Het moet toch mogelijk zijn om te zoeken naar specifiek het woord dreamweaver. Dus dat hij door die tabel zoekt?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je kan dat doen met een LIKE, maar het is niet de beste oplossing.

Pas je datamodel aan naar hetgeen wat gorgi_19 en P_d_B voorstellen. Je mag je datamodel niet laten afhangen van hetgeen je aan de client kant wil doen. Ik bedoel: je mag je datamodel niet zo maken omdat het dan aan de client-kant makkelijker is om je gegevens in je DB te bewaren.
Als je een slecht datamodel hebt (zoals je nu hebt), loop je vroeg of laat tegen problemen aan.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 12 februari 2004 @ 10:20:
oke het klopt dat mischien de tabel niet 100% goed is maar. Ik vul de tabel door middel van een asp formulier. Ik kan in dit formulier meerdere items voor het veld software selecteren je krijgt dus: dreamweaver, office, flash.
En alle items mogen imho gewoon in aparte records opgeslagen worden, anders wordt het wel lastig omgoed te doorzoeken.

Wat je nu doet is een brak datamodel gebruiken en als gevolg hiervan allerlei trage en ranzige hacks gaan bedenken, welke een grotere form van inflexibiliteit opleveren

[ Voor 16% gewijzigd door gorgi_19 op 12-02-2004 10:25 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Kun je met het laten zien hoe ik het doe met like? Zodat ik zelf een afweging kan maken wat ik wil gaan kiezen?

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 00:04

ripexx

bibs

Als je dit perse vast wil houden wordt je query zo iets maar dat s niet echt aan te radenmet betrekking tot preformance:

SQL:
1
2
3
SELECT count(id) as aantal
FROM stukijst
WHERE software LIKE '%office%';


Nu worden alle resultaten waarin het woord 'office' in voorkomt geteld, verder is het handig om altijd te tellen op een primary key (PK) omdat dit de snelste index zou moeten zijn.

buit is binnen sukkel


Verwijderd

Binnen asp gebruik je %% (ook wel wildcard genoemd) om te zoeken op een gedeelte van een veld.

SQL:
1
Where Software Like '%office%'


Deze query zal ook MSOffice etc vinden. Let op, als je wildcards gebruikt moet je LIKE gebruiken ipv =.

In MSAcces en andere dbms'en wordt vaak een * ipv een % gebruikt.

Succes.

Edit: Godver, godver, godver!!! ;)

[ Voor 9% gewijzigd door Verwijderd op 12-02-2004 10:25 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

ripexx schreef op 12 februari 2004 @ 10:24:
Nu worden alle resultaten waarin het woord 'office' in voorkomt geteld, verder is het handig om altijd te tellen op een primary key (PK) omdat dit de snelste index zou moeten zijn.
Bij een constructie, waarbij je start met een %, wordt geen index gebruikt, afaik :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Sorry, ik heb gelink naar het verkeerde topic. [rml]curry684 in "[ SQL] bitselectie enum/set->algoritme *"[/rml] was wat ik bedoelde

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 12 februari 2004 @ 10:24:
Kun je met het laten zien hoe ik het doe met like? Zodat ik zelf een afweging kan maken wat ik wil gaan kiezen?
Mjah, je kan natuurlijk ook zelf even in een sql tutorial de syntax en het gebruik van like gaan opzoeken. :/

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 12 februari 2004 @ 10:24:

In MSAcces en andere dbms'en wordt vaak een * ipv een % gebruikt.
Binnen Access zelf wel ja.
Als je echter je Access DB aanspreekt via ODBC/ADO/etc..... moet je weer % gebruiken. Je Access driver zal die % dan gaan omzetten in een *. Als je in dat geval toch een * gebruikt, zal het niet werken geloof ik.

https://fgheysels.github.io/


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 00:04

ripexx

bibs

gorgi_19 schreef op 12 februari 2004 @ 10:26:
[...]

Bij een constructie, waarbij je start met een %, wordt geen index gebruikt, afaik :)
Klopt :o, maar het was meer gericht op het genruik van count itt de ranzige LIKE '%$iets%' constructie.

buit is binnen sukkel


Verwijderd

Topicstarter
SELECT count(*) AS aantal
FROM stuklijst
WHERE software LIKE '*office*';


deze code werkt
bedankt voor jullie suport
Pagina: 1