[JAVA/SQL] hoe te filteren?

Pagina: 1
Acties:

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Hoi allemaal,
Ik heb een probleempje met sorteren van gegevens. Het gaat om een lijst van codes (3letters en 3 cijfers: bijv. AEA111, HERB141) die ik uit de db haal. Die lijst zit in een vector opgeslagen.

Nou heb ik een filter die een aaltal atrributen bevat in een slect box. Elk attribuut zou dus die lijst moeten filteren op de laatste 3 tekens (dus de getallen). Op zich is het makkelijk als elk filter maar 1 waarde zou hebben waarop er gefilterd moest worden.
Maar dit is nu de case:
Als bijvoorbeeld optie 1 geselecteerd is moeten de volgende elementen in de lijst overblijven:
600, AEA111 t/m HRB141

De 600 kan ik nog uitfilteren, maar noe kan ik de t/m gedeelte aanpakken?
Als ik de 30 elementen die daarbij horen handmatig moet uitschrijven ben ik niet slim bezig denk ik. Maar hoe kan ik de lijst dus daarop filteren? Kan ik door de lijst itereren of is het verstandiger om de lijst opnieuw te vullen en dus de filters in de sql uit te voeren en zo ja hoe combineer je between en like operaties?

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:56

momania

iPhone 30! Bam!

Laat eerst eens wat relevante voorbeeld code zien, want ik snap echt geen bal van wat je nou wilt.

Het eerste wat iig in me opkomt is dat je datamodel niet klopt, of iig aanpassingen nodig heeft waardoor je dan niet zo moeilijk met je data hoeft te lopen filteren etc.. ;)

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

turkosh schreef op vrijdag 09 december 2005 @ 09:50:
3letters en 3 cijfers: bijv. AEA111, HERB141
:?

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
sorry typ foutje ;) (HRB141)

Verwijderd

Misschien ben ik de enige maar ik snap bar weinig van je probleem. Wat is "optie 1"? Ik denk eruit te begrijpen dat je een aantal waardes uit een Lijst wilt selecteren op basis van voorwaarden op de 3 cijfers?

  • LAN
  • Registratie: Oktober 2000
  • Niet online

LAN

Ik snap er ook niet veel van.
Ik lees iets van een lijst en een combobox. Mag ik daaruit concluderen dat je of met Swing, of met HTML werkt? Maar welke van de twee dan?

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Eerlijk gezegd probeer ik ook zelf te snappen wat er bedoelt wordt ;)
Misschien help het als ik het zo schrijf:
Aan de hand van een filter ("global" id) wordt en uit de db een lijst van "depot" id's opgehaald (die refereren naar de global id dus) en in een vector gestopt.

Die lijst moet aan de hand van een 2e filter (optie filter) verder gefilterd worden aan de hand van de depot_codes (dus de xxx123).

Opmerking: Die vector lijst wordt gebruikt om een selectFromId() uit te voeren om juiste depot gegevens erbij te halen.

Verschiel tussen eerste filter en 2e filter is het volgende:
filter 1 heeft 1 global_id waarde voor elk attribuut
vb: selectbox filter 1
<select name="global" size="1" onchange="submit();">
<option value="69568511">E-versie</option>
<option value="232297279">F-versie</option>
<option value="244304204" selected>G-versie</option>
</select>
De value wordt direct gebruikt

filter 2 heeft dus meerdere depot_codes voor elk attribuut
<select name="depot" size="1" onchange="submit();">
<option value="blue">Hoven "Blauw"</option>
<option value="green">Vracht 2 "Groen"</option>
<option value="red">Vaart "Rood"</option>
<option value="white">Eigen depots "Wit"</option>
<option value="yellow1">Vracht 1 "Geel"</option>
<option value="yellow2">MailMerge "Geel"</option>
</select>
En hier wordt de value vertaald!
dus:
yellow 1: depot_code = xxx600 + depot_code = AEA111 t/m HRB141
enzovoort

Edit: ik wil iets uitproberen met regex.
Hoe krijg ik met string.match() voor elkaar dat de regex de regel voor yellow1 implemeteert?
Ik kwam op het vogende:

Itereer vector
dbObject = vector.next()
if (!dbObject.getDepotCode().match("[a-zA-Z][a-zA-Z][a-zA-Z][6][0][0]") || !dbObject.getDepotCode90.match("???"))

[ Voor 24% gewijzigd door turkosh op 09-12-2005 11:29 ]


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Je wilt dus eigenlijk de regex die AEA111 t/m HRB141 matcht?

Wat dacht je van die codes als String beschouwen en gewoon alles kleiner dan AEA111 of groter dan HRB141 eruit gooien door een compareTo? Of mag bijvoorbeeld AEA999 ook niet? In dat geval kan je volgens mij de letters en cijfers beter van elkaar splitsen en alsnog strings gaan matchen.

[ Voor 95% gewijzigd door Confusion op 09-12-2005 11:42 . Reden: en=of ]

Wie trösten wir uns, die Mörder aller Mörder?


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Daar zit ik ook een beetje mee. Als de letters en cijfers al gesplitst waren had ik het probleem niet ;)
Maar ik vraag mij af of het mogelijk is om deze filter te implementeren zonder de extra woord/getal splits routine in te voeren voor elk item. Uit het oogpunt van efficientie lijkt dat niet efficient.

Edit:
Ik denk dat het toch handiger is om regex in dit geval te vermijden, en de string te splitsen in integer (parseInt(substring)). Werken met integer is een stuk makkelijker dan onderhouden van een regex denk ik.
Bedankt allemaal _/-\o_

[ Voor 29% gewijzigd door turkosh op 09-12-2005 15:28 ]

Pagina: 1