[MYSQL] ORDER BY Besc Where String, mogelijk?

Pagina: 1
Acties:

  • mkanon
  • Registratie: September 2002
  • Niet online

mkanon

www.kanonweb.nl

Topicstarter
Ik heb een sql database met bv:

ID Code
1 sabbd760
2 b
3 dcvdsa
4 bzcxvaa
5 a876
6 a
7 skjhdsa
8 bba7t8

Nu doe ik Select * Where Code Like '%a%'

Nu zal hij de volgende volgorde aanhouden 1,3,4,5,6,7,8 Maar ik wil dat waar a 100% matched boven aan komen en daarna waar a op het eerste plek staat. dus : 6,5,1, etc......

Kan dit ?

I reject your reality and substitute my own!


  • sjroorda
  • Registratie: December 2001
  • Laatst online: 07-05 16:06
Full text search is waar jij op doelt, althans gedeeltelijk: de beste matches krijgen de hoogste prioriteit.

http://dev.mysql.com/doc/mysql/en/fulltext-search.html

[ Voor 27% gewijzigd door sjroorda op 04-04-2005 15:15 ]


  • mkanon
  • Registratie: September 2002
  • Niet online

mkanon

www.kanonweb.nl

Topicstarter
SELECT * FROM Kleur WHERE MATCH (KleurCode) AGAINST ('a');

en ik heb tonnen a's in Kleurcode zitten, en ik heb een fulltext index op kleurcode.... maar hij weigert 1 row terug te geven....

I reject your reality and substitute my own!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

mkanon schreef op maandag 04 april 2005 @ 15:13:
Nu doe ik Select * Where Code Like '%a%'

Nu zal hij de volgende volgorde aanhouden 1,3,4,5,6,7,8 Maar ik wil dat waar a 100% matched boven aan komen en daarna waar a op het eerste plek staat. dus : 6,5,1, etc......

Kan dit ?
Even lullige wedervraag: hij heeft toch gelijk? Alle resultaten matchen toch 100% met je query, en de rest 0%?

Je kunt daarnaast overigens wel wat met de SOUNDEX functie bereiken, alhoewel de MSSQL-functie DIFFERENCE dan weer helaas geen tegenhanger in MySQL heeft.

Professionele website nodig?


  • sjroorda
  • Registratie: December 2001
  • Laatst online: 07-05 16:06
Ik denk dat de overeenkomst tussen een kleurcode (6 letters) en de enkele 'a' te klein is om een positief resultaat terug te geven.

Maar ik denk sowieso dat het met kleurcodes niet op deze manier gaat werken: 00AA00 is bijvoorbeeld een 100% andere kleur dan 0000AA, terwijl in principe een match against 'a' voor beide evenveel terug moet geven (net als bij A00A00). Een ander algoritme lijkt me nuttiger!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Dit staat in de manual:
Some words are ignored in full-text searches:

* Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is four characters.
* Words in the stopword list are ignored. A stopword is a word such as ``the'' or ``some'' that is so common that it is considered to have zero semantic value. There is a built-in stopword list.

Noushka's Magnificent Dream | Unity


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Kleurcodes zijn opgebouwt uit RGB neem ik aan, waarom splits je dat niet in 3 kolommen op, dat maakt het querieen een stuk precieser lijkt me, want dan kan je gewoon orderen aan de hand van het verschil.

  • mkanon
  • Registratie: September 2002
  • Niet online

mkanon

www.kanonweb.nl

Topicstarter
De kleurcodes zijn tot max 8 lang en minimaal 2 lang, en er zit compleet geen structuur in, soms 8 cijfers soms letters liggende streepjes... etc...

I reject your reality and substitute my own!


  • Skaah
  • Registratie: Juni 2001
  • Niet online
Je moet minimaal 3 tekens in een woord hebben voor de FULLTEXT om te werken. Zie anders de fulltext documetatie: [google=fulltext site:mysql.com].

  • mkanon
  • Registratie: September 2002
  • Niet online

mkanon

www.kanonweb.nl

Topicstarter
Dus wat is dan de oplossing voor mijn probleem... Opzich mag het de volgorde ook zijn dan eerst de Absolute matches komen... en dan de LIKE. (kan iedereen mijn gebrabbel nog volgen... )

dus zeg maar eerst = en dan like %%...

Het probleem wat ik gewoon heb is dat als ik in mijn database zoek dat ik dan 9 van de tien keer een waarde terug krijg waar het gedeeltelijk inzit terwijl de waarde zelf ook 100% voorkomt....

I reject your reality and substitute my own!


  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Dan doe je er een order by op, die sorteert op de lengte van je zoekstring / lengte van de string in het veld.

Dat moet aardig goed gaan :)

  • mkanon
  • Registratie: September 2002
  • Niet online

mkanon

www.kanonweb.nl

Topicstarter
Order by wat ? als ik order bij Kleurcode en ik zoek op %a% krijg ik eerst alles met getallen er voor.... terwijl er misschien een a45 bestaat...

I reject your reality and substitute my own!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

Ben je niet gewoon dingen in de database aan het doen die daar absoluut niet thuishoren?

Professionele website nodig?


  • mkanon
  • Registratie: September 2002
  • Niet online

mkanon

www.kanonweb.nl

Topicstarter
Nee, ik zoek volgens mij gewoon een orderby die niet bestaat, ik probeer hier m'n ongelijk te zoeken....

I reject your reality and substitute my own!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

mkanon schreef op maandag 04 april 2005 @ 17:25:
Nee, ik zoek volgens mij gewoon een orderby die niet bestaat, ik probeer hier m'n ongelijk te zoeken....
Tip: wellicht bestaat ie niet omdat je dingen in de database aan het doen bent die daar absoluut niet thuishoren ;)

Professionele website nodig?


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Nog een tip van mij: Als de data in je database een puinhoop is dan dien je die eerst te ordenen, tjah nogmaals een pleidooi om dataintegriteit ALTIJD vanuit je database af te dwingen en NOOIT vanuit een applicatie.

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

mkanon schreef op maandag 04 april 2005 @ 16:44:
Order by wat ? als ik order bij Kleurcode en ik zoek op %a% krijg ik eerst alles met getallen er voor.... terwijl er misschien een a45 bestaat...
code:
1
Order by ( CHAR_LENGTH(keyword) / CHAR_LENGTH(code) )


Als je dan zoekt op a krijg je de volgende resultset :

code:
1
2
3
4
5
a
3a
a876
8787a878
ssdfsffsfaaasfds

  • mkanon
  • Registratie: September 2002
  • Niet online

mkanon

www.kanonweb.nl

Topicstarter
En dat zocht ik nou !!!!! er is wel een oplossing :D Dank u!

I reject your reality and substitute my own!


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-05 21:02

killercow

eth0

Wat niet wegneemt dat je data een puinhoop is naar mij idee. Ik zou al eerste er eens voor zorgen dat al je data uit 6 chars bestaat (en het dus een kleur code is) (streepjes eruit, aanvullen van 3 char kleuren enzo)

openkat.nl al gezien?


  • mkanon
  • Registratie: September 2002
  • Niet online

mkanon

www.kanonweb.nl

Topicstarter
killercow schreef op dinsdag 05 april 2005 @ 11:45:
Wat niet wegneemt dat je data een puinhoop is naar mij idee. Ik zou al eerste er eens voor zorgen dat al je data uit 6 chars bestaat (en het dus een kleur code is) (streepjes eruit, aanvullen van 3 char kleuren enzo)
Misschien dat je eerst even moet weten wat voor data het is voor dat je een oordeel velt over de dan wel of niet een puinhoop van mijn data.

De kleurcodes zijn gedocumenteerde auto kleuren, deze worden uit een excel bestand geparsd. er moet ook weer exact gezocht kunnen worden op die kleurcodes. dus incl - etc. aangezien geen merk gelijke lengtes hanteerd kan ik dus ook niks aanvullen!

I reject your reality and substitute my own!


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-05 21:02

killercow

eth0

mkanon schreef op dinsdag 05 april 2005 @ 13:33:
[...]


Misschien dat je eerst even moet weten wat voor data het is voor dat je een oordeel velt over de dan wel of niet een puinhoop van mijn data.

De kleurcodes zijn gedocumenteerde auto kleuren, deze worden uit een excel bestand geparsd. er moet ook weer exact gezocht kunnen worden op die kleurcodes. dus incl - etc. aangezien geen merk gelijke lengtes hanteerd kan ik dus ook niks aanvullen!
En van die kleuren zijn er geen conversie tabellen? dus dat je er cmyk van maakt oid?

Als ieder merk wel zijn eigen opmaak/techniek gebruikt om dingen op te slaan, en de kleuren dus niet met elkaar corresponderen heeft het dan zin om ze in een een database te gooien? je zoekt dan toch altijd naar kleur x van merk y? (en die kun je dan toch per merk dan beter in een lose tabel zetten?) (of igg je select per merk doen?)

Naja anyway, ik kan hier wel de wijsneus uithangen, maar jij weet vast wel wat je doet :)

openkat.nl al gezien?

Pagina: 1