[MySql] Zoeken mbv like

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Vinze
  • Registratie: Augustus 2006
  • Laatst online: 20-09 09:35
Ik probeer een aantal (zoek)resultaten uit mijn database te halen, maar dit lukt niet helemaal zoals ik het wil.
In de database staat namelijk een tabel 'werkstations' met een cell die heet 'controleweek', hierin staan een aantal weeknummers gescheiden door een komma. (bijv: 2,17,32,49)
Nu wil ik gaan zoeken naar een weeknummer in die cell, dit doe ik op de volgende manier:
SELECT * FROM werkstations WHERE controleweek LIKE '%2%'

Probleem hiermee is dat hij alles met een 2 eruit haalt, dus ook 32,20,12 etc etc.
Hij zou dus eigenlijk moeten zoeken tussen die komma's, ik heb alleen geen flauw idee hoe ik dit voor elkaar kan krijgen. Wellicht iets met reguliere expressies(?)

Zou iemand mij kunnen vertellen of en hoe ik dit het beste kan oplossen?

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 22:00

orf

Je echte oplossing is normaliseren. Zorg ervoor dat de weeknummers in een koppeltabel terecht komen. Kommagescheiden waarden zijn altijd fout.

Acties:
  • 0 Henk 'm!

  • console
  • Registratie: September 2002
  • Laatst online: 23:17
doe dan;
code:
1
SELECT * FROM werkstations WHERE controleweek LIKE '%,2,%'


Je kolom data dient dan wel te beginnen met een komma en te eindigen met een komma.

Voorbeeld;
code:
1
,3,5,7,8,9,

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Bovenstaand is slechts een quickfix/hack voor je huidige opzet. Orf noemt de enige echte oplossing.

[ Voor 13% gewijzigd door Voutloos op 29-01-2011 21:33 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Vinze
  • Registratie: Augustus 2006
  • Laatst online: 20-09 09:35
orf schreef op zaterdag 29 januari 2011 @ 21:20:
Je echte oplossing is normaliseren. Zorg ervoor dat de weeknummers in een koppeltabel terecht komen. Kommagescheiden waarden zijn altijd fout.
Ja klopt, alleen dat is nu achteraf helaas bijna niet meer te doen, vandaar dat ik me af vroeg of het zo ook zou kunnen.
console schreef op zaterdag 29 januari 2011 @ 21:21:
doe dan;
code:
1
SELECT * FROM werkstations WHERE controleweek LIKE '%,2,%'


Je kolom data dient dan wel te beginnen met een komma en te eindigen met een komma.

Voorbeeld;
code:
1
,3,5,7,8,9,
Daar heb ik ook aan gedacht maar gaat helaas niet lukken, het is namelijk een array welke PHP implode voordat het in de database komt.

Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
SELECT * FROM werkstations WHERE CONCAT(',', controleweek, ',') LIKE '%,2,%'


-> Je kolom data dient dan wel te beginnen met een komma en te eindigen met een komma.

Maar aparte tabel is veel netter inderdaad, ook mbt het afvinken of een pc gecontroleerd is. PostgreSQL kan wel handig overweg met patterm matching.

Edit:
@Voutloos: Ach als je het al fout doet vanaf het begin en geen high performance app moet worden, kan je het best nog fouter maken als je geen zin hebt opnieuw te beginnen.

[ Voor 17% gewijzigd door Verwijderd op 29-01-2011 21:43 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Vinze schreef op zaterdag 29 januari 2011 @ 21:39:
Daar heb ik ook aan gedacht maar gaat helaas niet lukken, het is namelijk een array welke PHP implode voordat het in de database komt.
Oei, balen. Heb ook nooit begrepen waarom het zo moeilijk is om een paar karakters aan een string in PHP te concatten.

[ Voor 51% gewijzigd door Voutloos op 29-01-2011 21:42 ]

{signature}


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 22:00

orf

Vinze schreef op zaterdag 29 januari 2011 @ 21:39:
Ja klopt, alleen dat is nu achteraf helaas bijna niet meer te doen, vandaar dat ik me af vroeg of het zo ook zou kunnen.
Waarom niet? Met enkele regels PHP heb je dit voor elkaar:

- Maak een nieuwe koppeltabel
- Doe een select op de huidige tabel.
- Explode op de komma
- Doe een foreach op de array en insert dat als row in de nieuwe tabel
- Verwijder de huidige kolom

Daarmee hoef je in de toekomst niet meer aan de slag met explodes, implodes en likes. Daarnaast kun je ineens écht iets met de data. Geef me bijvoorbeeld het aantal werkstations die beschikbaar zijn in week 5.

Acties:
  • 0 Henk 'm!

  • Palomar
  • Registratie: Februari 2000
  • Niet online
Kun je dat record dan niet met php inlezen in een array (met explode oid) en dan in die array zoeken? Lijkt me zo te lezen wel een oplossing. Al is het beter om je db te normaliseren.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 02:01

MueR

Admin Tweakers Discord

is niet lief

Mocht je het perse zo willen doen, gebruik dan gewoon de daarvoor bedoelde functie.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Vinze
  • Registratie: Augustus 2006
  • Laatst online: 20-09 09:35
Bedankt voor de tips!

Ik ga dan toch maar even kijken naar het normaliseren, dan is 't in de toekomst ook wat makkelijker te beheren en/of aan te passen denk ik.
Pagina: 1