A peer suggested using
concat(alias,CHAR(37)) instead of concat(alias,'%') and it works
Documenting here for posterity.
Scott
ScottC wrote:
>
> Hi Jan,
> Thanks for your response. I posted here instead of a SQL forum, because I
> figured someone had already needed to do a longest match....and therefore
> I wouldn't have to explain the full requirements of why I needed to NOT do
> it 10 other ways.
>
> I still have a problem tho. When try to make the query (from GNU-GK),
> the % in the concat doesn't get interpreted right. I think it's waiting
> for one of [s,c,p,r,i,m]. I tried to escape it several ways, different
> quotes, etc. The sql statement works fine if I do it by hand, but I
> think GNU-GK isn't.
> Here's the error I get.
> Routing.cxx(1681) SqlPolicy: query failed (1) - You have an error in
> your SQL syntax; check the manual that corresponds to your MySQL server
> version for the right syntax to use near '') order by length(alias)
> desc,pref' at line 1
> Here is the line from my gk.ini
> Query=select hostIP from h323Routes where '%c' like concat(alias,'%')
> order by length(alias) desc,pref;
>
> Any thoughts?
> Scott
>
> Willamowius wrote:
>>
>> Hi Scott,
>>
>> I think this is more of an SQL question that depends on what database
>> and table structure you are using, than a GnuGk question.
>>
>> Anyway, the simple form of such a query could be
>>
>> select gwip from routes where '%c' like concat(prefix,"%") order by
>> length(prefix) desc;
>>
>> This assumes a table routes with a prefix and a gateway ip field.
>> The query would produce a list of gateways that match the called number
>> sorted by longest prefix match.
>>
>> To avoid all the ugly IF handling if nothing matches, I would add a
>> route with an empty prefix and 'REJECT' in the gateway IP.
>>
>> Regards,
>> Jan
>>
>>
>> ScottC wrote:
>>>
>>> I'm trying to use a SQL table to hold my routes and want to search for
>>> longest match.
>>> This works using this query.
>>> select if((select count(*) from h323Routes where alias='%c'),(select
>>> hostIP
>>> from h323Routes where alias='%c'),SUBSTR('%c',1,(LENGTH('%c')-1)))
>>>
>>> Now...I want to try to add a second route to be used for failover. When
>>> I
>>> do this, I get "ERROR 1242 (21000): Subquery returns more than 1 row".
>>> I read on this and it seems to suggest using the keyword ANY, but I
>>> can't
>>> find any examples of this in an IF statement.
>>>
>>> Any help would be greatly appreciated.
>>> Scott
>>
>> --
>> Jan Willamowius, [email protected], http://www.gnugk.org/
>>
>> ------------------------------------------------------------------------------
>> Download Intel® Parallel Studio Eval
>> Try the new software tools for yourself. Speed compiling, find bugs
>> proactively, and fine-tune applications for parallel performance.
>> See why Intel Parallel Studio got high marks during beta.
>> http://p.sf.net/sfu/intel-sw-dev
>> _______________________________________________________
>>
>> Posting: mailto:[email protected]
>> Archive:
>> http://sourceforge.net/mailarchive/forum.php?forum_name=openh323gk-users
>> Unsubscribe: http://lists.sourceforge.net/lists/listinfo/openh323gk-users
>> Homepage: http://www.gnugk.org/
>>
>>
>
>
--
View this message in context:
http://old.nabble.com/SQL-query-for-longest-match-%28multiple-results%29...SQL-error-tp28262100p28287752.html
Sent from the GNU Gatekeeper Users mailing list archive at Nabble.com.
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________________
Posting: mailto:[email protected]
Archive:
http://sourceforge.net/mailarchive/forum.php?forum_name=openh323gk-users
Unsubscribe: http://lists.sourceforge.net/lists/listinfo/openh323gk-users
Homepage: http://www.gnugk.org/