"Jean-Christophe Deschamps" <j...@q-e-d.org>
schrieb im Newsbeitrag news:7.0.1.0.2.20090312013713.0262b...@q-e-d.org...

> Perhaps the best way is practice: what's the way to find
> this guy named Éric or is it éric, or Eric, or eric?
> He lives in MÜNCHEN, München, MUNCHEN,
> Munchen or ... Munich.

IMO that's not that much a locale-problem - for these kind of
"unsharp-queries" one can use (but then usually requiring a
fulltable-scan) appropriate userdefined functions like e.g.
a Ratcliff/Obershelp-Algo or Metaphone or something
similar.

Here comes a short code-snippet, what my results are
regarding your example-case from above, using the
Ratcliff-Implementation of my VB-Wrapper.


First the results for different search-terms:
(ID, City, Name is the Tbl-Content - RcCity, RcName
 and RcSum are calculated Ratcliff-Results [0 - 100])

for City="munchen" and Name="eric"

ID      City      Name      RcCity    RcName    RcSum
 2      Munchen   Eric      100       100       200
 3      MUNCHEN   eric      100       100       200
 1      München   Erich      79        67       146
 4      Munic     Éric       45        96       141
 9      Moskau    Sergej     27        28        55
 8      London    Paul       27        21        48
 6      Rome      Milan      30        14        44
 7      Madrid    Jose       11        21        32
10      Moscow    Alexey     11        10        21
 5      Paris     Serge       0        14        14

for City="moscow" and Name="sergey"

ID      City      Name      RcCity    RcName    RcSum
 9      Moskau    Sergej     50       87        137
10      Moscow    Alexey    100       36        136
 5      Paris     Serge      14       94        108
 7      Madrid    Jose       17       32         49
 4      Munic     Éric       32       10         42
 8      London    Paul       33        0         33
 1      München   Erich       9       14         23
 2      Munchen   Eric       11       10         21
 3      MUNCHEN   eric       11       10         21
 6      Rome      Milan      12        0         12

Ok, here comes the used data and the query-example:
(sorry, just a Copy'nPaste from a small test-project -
 no C-Code - just that you get the idea, how the queries
 could look like and what the small test-set was)

Set Cnn = New cConnection
Cnn.CreateNewDB 'without Param creates an InMemory-DB

Cnn.Execute "Create Table T(ID Integer Primary Key, City Text, Name Text)"
'first a few similar sounding inserts
Cnn.Execute "Insert Into T(City, Name) Values('München', 'Erich')"
Cnn.Execute "Insert Into T(City, Name) Values('Munchen', 'Eric')"
Cnn.Execute "Insert Into T(City, Name) Values('MUNCHEN', 'eric')"
Cnn.Execute "Insert Into T(City, Name) Values('Munic', 'Éric')"

'and a few different ones
Cnn.Execute "Insert Into T(City, Name) Values('Paris', 'Serge')"
Cnn.Execute "Insert Into T(City, Name) Values('Rome', 'Milan')"
Cnn.Execute "Insert Into T(City, Name) Values('Madrid', 'Jose')"
Cnn.Execute "Insert Into T(City, Name) Values('London', 'Paul')"
Cnn.Execute "Insert Into T(City, Name) Values('Moskau', 'Sergej')"
Cnn.Execute "Insert Into T(City, Name) Values('Moscow', 'Alexey')"

'now the Ratcliff-based search
Dim SQL As String, Cmd As cSelectCommand
'define a Select-Command
SQL = "Select *, (RcCity + RcName) As RcSum From" & _
         " (Select *" & _
         ", Ratcliff(City,@City) As RcCity" & _
         ", Ratcliff(Name,@Name) As RcName" & _
         "  From T Order By (RcCity + RcName) Desc Limit 10)"
Set Cmd = Cnn.CreateSelectCommand(SQL)

'let's set the two Text-Params on the Cmd-Object and Execute
Cmd.SetText Cmd!City, "munchen"
Cmd.SetText Cmd!Name, "eric"

'  just another Param-Set
'  Cmd.SetText Cmd!City, "moscow"
'  Cmd.SetText Cmd!Name, "sergey"

Set Rs = Cmd.Execute()

'dump the results from the Rs-Content
Dim Fld As cField
For Each Fld In Rs.Fields 'enumerate Field-Names
  Debug.Print Fld.Name,
Next Fld
Debug.Print
Do Until Rs.EOF
  For Each Fld In Rs.Fields  'enumerate Field-Values
    Debug.Print Fld.Value,
  Next Fld
  Debug.Print
  Rs.MoveNext
Loop

Olaf



_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to