Results 1 to 10 of 10

Thread: Sql In String

  1. #1
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085

    Sql In String

    Name:  tabel.png
Views: 403
Size:  5.2 KB

    Ik heb een bestaande mysql tabel, daar moet ik een query maken op werknemers, die kunnen werken op bepaalde werkplekken.
    Deze werkplekken staan als string in een kolom.

    Hoe selecteer nu de werknemers op werkplek '01' of '04'?
    Ik ben aan het stoeien met substring maar die geeft niet het gewenste resultaat.
    Nu zwerven hier een aantal sql goeroe's die dit zo ophoesten, mag ik daar een beroep op doen?

    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  2. #2
    MySQL heeft daar een handige functie voor: FIND_IN_SET.

    SQL Code:
    1. SELECT *
    2. FROM Werknemer
    3. WHERE
    4.   FIND_IN_SET('04', Werkplekken) > 0

    Het alternatief voor andere databases werkt met LIKE, maar dan moet je eigenlijk met komma's gaan rommelen om ook werkplekken aan het begin of het eind van de lijst te matchen.

    SQL Code:
    1. SELECT *
    2. FROM Werknemer
    3. WHERE
    4.   ',' || Werkplekken || ',' LIKE '%,04,%') > 0

    Maar voor dit soort queries is het beter om een meer genormaliseerd model te hebben. I.p.v. een enkele kolom, zou je dan een aparte tabel maken waarin je een werknemer aan meerdere werkplekken kan koppelen (1 rij per werknemer/werkplek-koppeling).
    1+1=b

  3. #3
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Quote Originally Posted by GolezTrol View Post
    MySQL heeft daar een handige functie voor: FIND_IN_SET.
    Maar voor dit soort queries is het beter om een meer genormaliseerd model te hebben. I.p.v. een enkele kolom, zou je dan een aparte tabel maken waarin je een werknemer aan meerdere werkplekken kan koppelen (1 rij per werknemer/werkplek-koppeling).
    Hier kan ik meer door, bedankt.

    Het is een bestaande database, sommige ontwerpen zijn bijzonder, en om je te kunnen verplaatsen in de oorspronkelijke gedachte van de maker, vergt wat creativiteit.


    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Wat is het doel? Kijken of de werkplek legitiem is voor de gebruiker na inloggen. Als men eerst inlogt, dan is het toch relatief simpel om die string op te pakken, deze in een TStringlist te zetten en kijken of de login voor die gebruiker legitiem is?
    Last edited by GolezTrol; 05-Jul-19 at 12:41.
    Delphi is great. Lazarus is more powerfull

  5. #5
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Name:  space.png
Views: 203
Size:  6.9 KB

    Een kleine aanvulling, de spatie wordt gezien als karakter. '04'<>' 04'
    10.4.2, Delphi2010, of Lazarus 2.2.0

  6. #6
    Ik ken de context niet maar misschien is het een optie om de spaties te verwijderen uit de kolomwaardes. Een andere optie is misschien om regex te gebruiken.

  7. #7
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Dit is een bestaande database, waar ik niets aan mag veranderen, de klant is koning, maar frustratie geeft het wel.
    Zeker om dat je pas na enige tijd erachter komt dat je query een onvolledig resultaat ophoest.
    Debuggen kost nu eenmaal tijd, en tijd heb je altijd te kort.
    10.4.2, Delphi2010, of Lazarus 2.2.0

  8. #8
    Ja dan blijft het een beetje pappen en nat houden Kun je wel iets met die regex?

  9. #9
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    de functie Find_in_Set heeft we goed op weg geholpen.
    Heb in deze versie een extra check ingebouwd, waar het fout gaat, dan ga ik op een later tijdstip een kijken hoe vaak en waar het gebeurd.
    Dan zal ik in de bestaande programmatuur eens kijken of men er ook last van heeft, het kan best zo zijn dat het nog een niet ontdekte bug is.
    10.4.2, Delphi2010, of Lazarus 2.2.0

  10. #10
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Of mijn manier oppakken . Niet alles is te regelen met SQL
    Delphi is great. Lazarus is more powerfull

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •