Toon posts:

[MySQL] Filteren op onderdeel van een veld *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb hier een database draaien met een zooitje velden. nu staat er in 1 veld verschillende waarden. bv 03, of 01,02,03,. nu wil ik dat alles waar 03, in voor komt verschijnt. maar als ik de volgende query op de DB los laat
SELECT `knsbib`.*
FROM knsbib
WHERE (`knsbib`.`BOUW_SYS`='03,')
Laat hij alleen de records zien met een 03, in dat veld en dus niet de 01,02,03,. en als ik er % voor en achter zet geeft hij aan dat hij geen records gevonden heeft. zie voorbeeld.
SELECT `knsbib`.*
FROM knsbib
WHERE (`knsbib`.`BOUW_SYS`='^%03,%')
Wie kan mij vertellen wat ik verkeert doe

ps de Query's zijn gebouwd met PHPmyAdmin

Verwijderd

WHERE (`knsbib`.`BOUW_SYS` LIKE '%03%')

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 12:04
De LIKE is inderdaad een korte termijnoplossing. Waar je eens goed moet naar kijken is hoe je database georganiseerd is. Serializen van waarden in een enkel veld is doorgaans geen succes (lees: erg ranzig). Een database bestaat namelijk niet uit "een zooitje velden" maar uit tabellen waartussen je relaties kunt definiëren. In een genormaliseerde database had je van het hele probleem geen last gehad.

Regeren is vooruitschuiven


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 23-04 23:33

curry684

left part of the evil twins

Lees dit topic eens en ga daarna eens heel hard iets over normaliseren en koppeltabellen leren :)

en ik heb je titel maar even afgemaakt :)

[ Voor 6% gewijzigd door curry684 op 18-11-2005 13:54 ]

Professionele website nodig?


Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 18 november 2005 @ 13:43:
WHERE (`knsbib`.`BOUW_SYS` LIKE '%03%')
Bedankt voor de snelle reactie. echter rammelt hij nu ook alle waarden uit de Tabel ik zie dus de 03, er ook gewoon tussen staan.doe ik nu iets goed verkeerd??

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 23-04 23:33

curry684

left part of the evil twins

Ja, je gebruikt comma-separated fields in een database. Dat is goed verkeerd ja :)

Professionele website nodig?


Verwijderd

Topicstarter
ok ik heb nu de volgende query en dan zie ik geen records:
SELECT * FROM `knsbib` WHERE ('BOUW_SYS' LIKE '%01,%')
Moet ik de 01,02,03, vervangen voor 01-02-03-?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 23-04 23:33

curry684

left part of the evil twins

Waar gebruik je dit veld in godesnaam voor?

Professionele website nodig?


Verwijderd

Topicstarter
Hehe Korte uitleg het is voor een online onderdelenboek van het bedrijf waar ik werk en die 01 enz worden gebruikt om aan te duiden waar dat artikel gebruikt wordt. dit is een DB uit Dbase 4 en staat nu in MySql

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 12:04
Is het voor jou mogelijk om de structuur van de database aan te passen? Als ik je zo hoor worden 01, 02, 03 etc gebruikt om een onderdeel te linken aan artikelen waarin het gebruikt wordt. Dit is in een scriptje van +/- 10 regels om te bouwen naar een situatie met een koppeltabel, met alle voordelen vandien. Is alleen nog even de vraag hoeveel van de rest van de aplicatie je dan breekt / opnieuw moet fixen.

Regeren is vooruitschuiven


Verwijderd

Topicstarter
Hoi T_MOB. Ik zal hier onder een Post doen van de velden die zichtbaar zijn. en nu wil ik filteren op 01 enzo
Afbeeldingslocatie: http://www.hebikniet.com/cadbib.JPG

[ Voor 24% gewijzigd door Verwijderd op 18-11-2005 14:31 ]


Verwijderd

Werkt dat niet met die like?? Als je like '01' doet, moet hij toch alle velden retourneren waar 01 in voorkomt 8)7 Beter is nog inderdaad je database te herstructueren...

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 12:04
Dat je dat wil was al duidelijk... Dat het niet erg handig is weet je onderhand ook... De oplossing om het toch te te bereiken staat al in het topic. Kijk nog eens goed naar de onderstaande query die je zelf gepost hebt en bedenk je vervolgens dat in MySQL strings tussen quotes ( ' of " ) worden gezet en veldnamen tussen backticks ( ` ).
code:
1
SELECT * FROM `knsbib` WHERE ('BOUW_SYS' LIKE '%01,%')

Regeren is vooruitschuiven


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 23-04 23:33

curry684

left part of the evil twins

* curry684 wijst nog een keer subtiel op:
curry684 schreef op vrijdag 18 november 2005 @ 13:53:
Lees dit topic eens en ga daarna eens heel hard iets over normaliseren en koppeltabellen leren :)
;)

Professionele website nodig?


  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 21-04 15:42
Aangezien je toch al de boel in een mysql database aan het zetten ben neem ik aan dat je ook een nieuwe (web) frontend aan het maken bent. In dat geval zou ik je toch zeker aanraden om deze gegevens eens flink te normaliseren, Je kan deze data al zoiezo veel beter in 5 tabellen kwijt (hoofdgroepen, subgroepen, onderdelen, bouwsystemen, onderdelen_bouwsystemen_koppel).

Is veel beter te onderhouden en overzichtelijker. :) . Daarnaast is je database veel consistener en is het makkelijker om de juiste gegevens eruit te halen i.p.v. dat je met een ranzige query op komma gescheiden waarden in een kolom moet gaan selecteren, gooi het dan gewoon in excel :P
Pagina: 1