[MySQL] multiple enum velden matchen

Pagina: 1
Acties:

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
In de search kon ik een dergelijk probleem niet vinden en misschien is het ook handig voor anderen om dit te weten.

Stel ik heb 10 enum kolommen welke elk allemaal verschillende waardes hebben.

Nu wil ik deze enum kolommen gaan matchen. Echter hoeft deze match niet perfect te zijn. Dus als 1 enum kolom bijvoorbeeld niet matcht is dat niet erg. Hij moet ze echter wel sorteren op de beste match.

Zelf zat ik te denken om een extra kolom toe te voegen waar een bepaalde waarde in staat (welke?) en dan daar op te matchen met een bepaalde marge (welke?). Heeft iemand hier ideen voor? Elke kolom moet wel even zwaar wegen in de match

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
Als je 10 enum kolommen hebt kun je ook even kijken of je database model wel optimaal is.

Ik zou niet via een query deze berekening makkelijk kunnen doen maar er gewoon een applicatie voor schrijven denk ik.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Even los van de discussie of je datamodel correct is zul je sowieso een "afstand" moeten definieren tussen sets van waarden. Een perfecte match is bijvoorbeeld afstand 0. Voor elke 'fout' in de match zou je kunnen stellen dat de afstand 1 verder is. Als je dus zoekt op { aap, noot, mies }, dan is de afstand daarvan tot { bliep, noot, mies } en { aap, blaat, mies } allebei 1. De afstand tot { bliep, blaat, mies } is 2, enz.

Wat je in dat geval zou willen doen is een specifieke enum-match de waarde 1 geven, en een mismatch de waarde 0. En dan is het simpelweg een kwestie van al die waardes optellen om achter de afstand te komen.

In je query zou je dat kunnen doen door in je select simpelweg alle vergelijkingen bij elkaar op te tellen. Iig in MySQL, ik weet niet of dat ook geldt voor standaard SQL?
SQL:
1
2
3
SELECT rij_id, (kolom1='aap') + (kolom2='noot') + (kolom3='mies') AS distance
FROM tabel
ORDER BY distance ASC

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Er is dus geen mogelijkheid dat ik vooraf voor elke rij een waarde bereken waar eigenlijk alle eigenschappen in verwerkt zijn en die ik dan ga vergelijken met een zelfde berekende waarde, waar ik mee wil gaan matchen.

Want de afstand kan ik niet vooraf berekenen tot eenbepaalde match.

Of toch wel, ik zou dan de afstand tot nul moeten berekenen van alle rijen en dan ook die van de match en die dan van elkaar aftrekken, want dan heb ik het verschil en dat is de afstand.

Hmm, nee dat is ook niet handig.

Het mooiste zou zijn om alle mogelijkheden in 1 getal te verwerken en dat ik met dta getal kan matchen. Maar dat zal wel niet evenredig kunnen lukken.

[ Voor 54% gewijzigd door RSD op 19-02-2009 12:59 . Reden: Hersenspinsels ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dat zou enkel werken met booleans.

.oisyn doet een prima suggestie, veel mooier gaat het met dit datamodel niet worden.

{signature}


  • Motrax
  • Registratie: Februari 2004
  • Niet online

Motrax

Profileert

Data Quality tool zou dit wel kunnen doen, met fuzzy logic, matching, scores, afstanden e.d.

Enige nadeel... ik weet geen gratis tool op de markt, alleen betaalde.

Enige die je dacht ik zonder problemen zou kunnen gebruiken is Oracle Data Integrator, waar Oracle Data Quality en Oracle Data Profiling in zit (http://www.oracle.com/tec...e/products/odi/index.html)

Maar naar letter van de licentie mag je Oracle producten niet in productie gebruiken. Ik weet niet hoe het met deze tool zit en/of je perse een Oracle db er onder nodig hebt.

Ow wacht.. dit is PRG 8)7 Een tool installeren != programmeren.

☻/
/▌
/ \ Analyseert | Modelleert | Valideert | Solliciteert | Generaliseert | Procrastineert | Epibreert |


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Motrax schreef op donderdag 19 februari 2009 @ 13:16:
Ow wacht.. dit is PRG 8)7 Een tool installeren != programmeren.
offtopic:
Sinds de sluiting van DT&E: jawel. :P Is alleen nog niet in de beleidstopics verwerkt. :$

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Motrax schreef op donderdag 19 februari 2009 @ 13:16:
Data Quality tool zou dit wel kunnen doen, met fuzzy logic, matching, scores, afstanden e.d.
Nee, want er is een zeer belangrijke opmerking in de ts:
Elke kolom moet wel even zwaar wegen in de match
wat betekent dat je er geen gruwelijk spannende statistiek rocket science tegen aan hoeft te gooien. :)

{signature}


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik ben er nog steeds niet uit wat nu de te bewandelen weg is.

Als ik bijvoorbeeld elk enum kolom niet meer dan 10 items geef, dan kan ik de waardes in elke kolom laten representeren van 0 t/m 9.

5 rijen van10 enum kolommen zou er dan zo uit kunnen zien:


rij 1: 7656594320
rij 2: 3435790054
rij 3: 4357890982
rij 4: 1235357868
rij 5: 0334345432

Als ik deze nu bijvoorbeeld wil matchen met:

match: 0330434452

Dan zou ik de absolute waarde van het verschil moeten nemen en dan het aantal 0en tellen, degene met de meeste matches wint dan. Dat is volgens mij een manier. Maar dit is niet erg snel en makkelijk te doen volgens mij.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:18

Janoz

Moderator Devschuur®

!litemod

Euhm, wat is er mis met het voorstel van .oisyn? Ten eerste maakt je het jezelf nu alleen maar moeilijker, ten tweede ben je je database model alleen maar aan het verneuken en tot slot leg je jezelf ook nog de beperking op van maximaal 10 per enum.

Als klap op de vuurpijl is je voorstel ook nog eens een stuk ineficienter dan wat .oisyn voorsteld.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1