[EMAIL PROTECTED] wrote on 16/06/2005 16:29:46:
>
>
> [EMAIL PROTECTED] wrote on 06/16/2005 11:30:10 AM:
>
> > Cory Robin <[EMAIL PROTECTED]> wrote on 16/06/2005 08:09:22:
>
> > > I need to speed up a search, big time.
> > >
> > > I have an application that searches for records on a date field. If
it
> > > doesn't find an exact date match, it keeps searching adjacent days
until
> > it
> > > finds a certain amount of records.
> > >
> > > The problem now is, I'm using my application to loop through and run
> > > multiple queries and it's dog ass slow.. I'm hoping that one of
you
> > SQL
> > > gurus can point me in the right direction to create a query that
will
> > work
> > > it out for me. Here's the logic the best I can explain..
> > >
> > > I want to return a minimum of 15 records.. I'm searching for
records on
> > or
> > > around 2005-10-01
> > >
> > > Select * from table_x where row_date = '2005-10-01'
> > > /* at this point if matched records are >= 15 then simply return the
> > records
> > > on that date.. If not..*/
> > > Select * from table_x where row_date = '2005-09-31'
> > >
> > > Select * from table_x where row_date = '2005-10-02'
> > >
> > > And so on until it finds >= 15 records or it searches through 5 days
(+-
> > 3
> > > on search date)
> > >
> > > I hope this makes sense.. I'm new to all this stuff.
> > >
> > > Eventually I'm going to do the same thing for times as well..
>
> > Heres a suggestion:
>
> > select * from table_x
> > where row_date between date_sub(now(), interval 3 day) AND
> > date_add(now(), interval 3 day)
> > order by abs(time_to_sec(datediff(created, now())))
> > limit 15 ;
>
> > This does times relative to now(), but I am sure you can generalise
it.
> > The first line specifies the desired fields
> > The second selects (in principle) all the records within your largest
> > target window
> > The third orders them by closeness to your target time
> > and the last says you only want 15 of them.
>
> > This version is based on exact seconds from the target time (now() in
my
> > case): the version which works in whole days would only be slightly
> > different.
>
> > Alec
>
> Only one problem with your solution, LIMIT tells how many records AT
> MOST to return, he wants to get 15 AT LEAST and stop appending
> records once he gets over 15 total results.
>
> I can't seem to make a query (in reply to his problem) to return AT
> LEAST 15 rows without some sort of iteration or flow control
> involved in the process. Neither on of which is available in MySQL
> SQL until 5.0+. Since he didn't say which version he is using I am
> assuming a target version of 4.1 or less for the solution. Does
> anyone else have a non-scripted solution?
That wasn't the
way I read it "And so on until it finds >= 15 records or it searches
through 5 days" - within I interpret as wanting all the records within 5
days up to a limit of 15. I presume that if >15 records are found, those
closes to the target time are preferred.
Alec
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]