Hi!

On Nov 17, boris hajduk wrote:
> Saturday, November 17, Bruce Ferrell wrote:
> 
> BF> SELECT position, title FROM WHERE position1 IN (1...200) OR position2 IN
> BF> (1...200);
> 
> no, i wasn't clear enough, let's try it again.
>
> the table book contains :
> 
> |-- title -----|--position1--|--position2--|--lots of other fields---
> | bravenewworld|          0  |             |
> | foundation   |          1  |             |
> | shortstories |          2  |          3  |
> | neuromancer  |          4  |          7  |
> | hyperion     |          8  |          6  |
> | salem        |          5  |             |
> | lovedeath    |         11  |          9  |

And what's the problem ?

$_=join(",",(1..200));
$result=mysql_query( << AAAA );
SELECT IFNULL(position2,position1) as position,title
      WHERE position1 IN ($_) OR position2 IN ($_) ORDER BY position;
AAAA

You may change IFNULL to IF, if you use another 'dummy' value.

Still, it won't be very fast as MySQL cannot use _two_ indexes at one.
If you don't mind using MySQL 4.0 you can use UNION:

$_=join(",",(1..200));
$result=mysql_query( << AAAA );
SELECT position1 as position,title WHERE position1 IN ($_) UNION
SELECT position2 as position,title WHERE position2 IN ($_) ORDER BY position;
AAAA

This way MySQL will resolve both SELECT with indexes.

Regards,
Sergei

-- 
MySQL Development Team
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /   Sergei Golubchik <[EMAIL PROTECTED]>
 / /|_/ / // /\ \/ /_/ / /__  MySQL AB, http://www.mysql.com/
/_/  /_/\_, /___/\___\_\___/  Osnabrueck, Germany
       <___/

---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to