[SQL] Omgekeerd 'like' query?

Pagina: 1
Acties:
  • 261 views sinds 30-01-2008
  • Reageer

  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02
Ik zit met een tabel die ik als een soort van blacklist wil laten dienen.

Stel iemand geeft het woord "Piet" in:

Met like kun je bijv. met " where name like '%Piet%' " veel namen uit de database krijgen:
PietjePuk
ikBenPiet
Kanariepiet
etc

Nu wil ik het precies andersom hebben.
Stel in de database staat het woord Piet en iemand voert "pietjepuk" in.
Dit kun je dan dus niet met like doen.

Nu had ik gedacht om alle woorden uit de database te trekken (in een DAO zetten) en daarna met java gaan controleren. Met veel woorden in de blacklist zou dit wel es erg traag kunnen worden.

Zijn hier mooie andere oplossingen voor (al dan niet met SQL)?

  • glmona
  • Registratie: Maart 2005
  • Laatst online: 26-01 19:35
where name not like '%piet%'

  • Vozze
  • Registratie: December 2001
  • Laatst online: 23-02 14:29
Misschien zelf een blacklist aanleggen?

Dus een tabel met woorden die niet mogen worden gebruikt. Je kunt deze tabel dan continu uitbreiden met 'vervuilde' namen in je gewone tabel. Voor invoer checken of de ingevoerde naam voorkomt in die lijst.

Het is wel even flink wat werk..

[ Voor 10% gewijzigd door Vozze op 28-03-2006 09:10 ]

"He who thinks knows evertyhing, knows nothing" - Socrates


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 09:59

Gonadan

Admin Beeld & Geluid, Harde Waren
Da's niet echt wat hij bedoelt denk ik :)

werkt "where '%PietjePuk%' like name" niet? (is maar wild idee hoor ;) )

Anders moet je de zoekstring gaan opdelen ofzo :?

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02
Is inderdaad niet echt helemaal de bedoeling dit ;)
Vozze schreef op dinsdag 28 maart 2006 @ 09:08:
Misschien zelf een blacklist aanleggen?

Dus een tabel met woorden die niet mogen worden gebruikt. Je kunt deze tabel dan continu uitbreiden met 'vervuilde' namen in je gewone tabel. Voor invoer checken of de ingevoerde naam voorkomt in die lijst.

Het is wel even flink wat werk..
Dat is idd ook precies wat ik al heb maar wil deze dus ook gaan gebruiken.
Op het moment wordt deze dus ook al gebruikt maar wordt het ingevoerde woord precies gematched op het woord in de blacklist tabel.
Nu wilde ik hem met like iets slimmer maken maar heb ik dus volgens de TS ook een "soort van" omgekeerde 'LIKE' nodig om hem nog slimmer te maken.....
Gonadan schreef op dinsdag 28 maart 2006 @ 09:09:
[...]
werkt "where '%PietjePuk%' like name" niet? (is maar wild idee hoor ;) )

Anders moet je de zoekstring gaan opdelen ofzo :?
Vond die gedachte HELEMAAL zo stom nog niet, maar het werkt helaas niet ;)
Het opdelen van de zoekstring is ook ongeveer wat ik bedoelde in mijn TS, dus de woorden gaan vergelijken in de code zelf.
Het probleem is alleen: welke criteria ga je hanteren bij het opdelen van de zoekstring.

Als iemand dus invult: PietjePukIsLief > waar moet je dan op gaan filteren, hoe weet je dan dat het ingevoerde woord piet niet mag.


Iemand anders toevallig al eerder een blacklist gemaakt? Of iemand die weet hoe anderen dit probleem aangepakt hebben?

[ Voor 7% gewijzigd door bvp op 28-03-2006 09:36 ]


  • Vozze
  • Registratie: December 2001
  • Laatst online: 23-02 14:29
Tsja,

Met namen blijft het altijd lastig. Er zijn geen 'algemene regels' van namen die niet mogen. Volgens mij kun je dan alleen nog maar op extremen controleren.

"He who thinks knows evertyhing, knows nothing" - Socrates


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02
Vozze schreef op dinsdag 28 maart 2006 @ 09:40:
Tsja,

Met namen blijft het altijd lastig. Er zijn geen 'algemene regels' van namen die niet mogen. Volgens mij kun je dan alleen nog maar op extremen controleren.
Verklaar je nader :? Hoe bedoel je precies om op deze extremen te controleren?

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 09:59

Gonadan

Admin Beeld & Geluid, Harde Waren
Je op verschillende manieren opdelen:

- bij een hoofdletter beginnen (werkt waarschijnlijk alleen bij de namen uit jouw voorbeelden ;) )

- steeds een aantal letters pakken, bv. 4 (Piet, jePu, kIsL, ief) (niet echt nauwkeurig)

- iteratief een aantal letters pakken en 1 opschuiven (Piet, ietj, etje, tjeP, jePu, ePuk, etc) (nauwkeuriger, maar meer resources)

En er zijn nog tientallen andere opties :)
bvp schreef op dinsdag 28 maart 2006 @ 09:43:
[...]


Verklaar je nader :? Hoe bedoel je precies om op deze extremen te controleren?
Hij bedoelt dat als je kwaad wilt toch wel een naam kan bedenken die jij niet wil maar die je script niet vindt :)

[ Voor 28% gewijzigd door Gonadan op 28-03-2006 09:46 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02
Gonadan schreef op dinsdag 28 maart 2006 @ 09:45:
Je op verschillende manieren opdelen:

- bij een hoofdletter beginnen (werkt waarschijnlijk alleen bij de namen uit jouw voorbeelden ;) )

- steeds een aantal letters pakken, bv. 4 (Piet, jePu, kIsL, ief) (niet echt nauwkeurig)

- iteratief een aantal letters pakken en 1 opschuiven (Piet, ietj, etje, tjeP, jePu, ePuk, etc) (nauwkeuriger, maar meer resources)

En er zijn nog tientallen andere opties :)


[...]

Hij bedoelt dat als je kwaad wilt toch wel een naam kan bedenken die jij niet wil maar die je script niet vindt :)
Tja het blijft een complex probleem natuurlijk, vandaar dat er laatst ook (geloof ik bij email adressen van yahoo) een issue over was.
Vind dat iteratief opschuiven hierbij idd wel een erg mooi idee, wordt zo'n iteratief proces alleen niet erg traag bij veel woorden?
Zou een systeem als yahoo of hotmail het ook zo doen?

  • mjax
  • Registratie: September 2000
  • Laatst online: 16-02 07:53
Het is toch echt niet zo moeilijk hoor:

code:
1
select * from users where 'pietjepuk' like concat('%', name, '%')


Doet precies wat je wilt.

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 09:59

Gonadan

Admin Beeld & Geluid, Harde Waren
mjax schreef op dinsdag 28 maart 2006 @ 09:50:
Het is toch echt niet zo moeilijk hoor:

code:
1
select * from users where 'pietjepuk' like concat('%', name, '%')


Doet precies wat je wilt.
Da's zo'n beetje wat ik zei, maar dan wel goed opgeschreven :P

@bvp: Het is een bewerking van een String, dus da's niet bijster snel.
Maar een redelijke pc moet het toch snel kunnen doen. :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Sommige databases ondersteunen ook nog de SOUNDEX functie. Misschien dat TS daar nog iets mee kan?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02
mjax schreef op dinsdag 28 maart 2006 @ 09:50:
Het is toch echt niet zo moeilijk hoor:

code:
1
select * from users where 'pietjepuk' like concat('%', name, '%')


Doet precies wat je wilt.
Thnx, die kende ik ook nog niet. concat wordt helaas alleen niet ondersteund hier....
P_de_B schreef op dinsdag 28 maart 2006 @ 09:55:
Sommige databases ondersteunen ook nog de SOUNDEX functie. Misschien dat TS daar nog iets mee kan?
Deze herkent ie wel, ga ik nu es ff mee vogelen dan maar ;)

Edit:
Werkt helaas ook niet de soundex functie. Kijkt eerst naar het eerste karakter en vervolgens een code van de rest van de karakters.
Als Piet dus niet zou mogen > zou hij met "PietjePuk" wel een resultaat teruggeven maar met "ikDeViezePiet" dus niet.

[ Voor 20% gewijzigd door bvp op 28-03-2006 11:01 ]


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 09:59

Gonadan

Admin Beeld & Geluid, Harde Waren
Welk type database gebruik je?

Dan is er vast een alternatief voor concat te vinden :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02
Gonadan schreef op dinsdag 28 maart 2006 @ 10:59:
Welk type database gebruik je?

Dan is er vast een alternatief voor concat te vinden :)
De database die hier gebruikt wordt is Oracle versie 9.
Is hier misschien een alternatief voor concat?

  • Vozze
  • Registratie: December 2001
  • Laatst online: 23-02 14:29
bvp schreef op dinsdag 28 maart 2006 @ 11:11:
[...]


De database die hier gebruikt wordt is Oracle versie 9.
Is hier misschien een alternatief voor concat?
code:
1
select * from users where 'pietjepuk' like '%' || name || '%'


CONCAT bestaat wel, maar kan maar 2 argumenten bevatten.

"He who thinks knows evertyhing, knows nothing" - Socrates


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02
Vozze schreef op dinsdag 28 maart 2006 @ 11:23:
[...]


code:
1
select * from users where 'pietjepuk' like '%' || name || '%'


CONCAT bestaat wel, maar kan maar 2 argumenten bevatten.
Ok thnx!! Dit werkt, hier kan ik wel mee verder ;)

Thnx ook iedereen
Pagina: 1