RE: What search algorithm does in_array() use?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Don't use a theta join - use a left, right or inner preferably with ANSI
syntax and make sure you indexes are set up correctly - this shouldn't
take very long to execute at all.

SELECT d.account 
FROM data d
  INNER JOIN accesslist a 
    USING account  (or ON d.account=a.account)
WHERE a.username='username'

Respectfully,
Ligaya Turmelle
Systems Analyst
Guamcell Communications
Phone: (671)689-2377 
-----Original Message-----
From: Ken Dozier [mailto:kdozier@xxxxxxxxxx] 
Sent: Wednesday, January 31, 2007 6:31 AM
To: ceo@xxxxxxxxx
Cc: php-general@xxxxxxxxxxxxx; 'Gregory Beaver'
Subject: RE:  What search algorithm does in_array() use?

Thanks to all for your input, guys.

Regarding the construction of the SQL query, I would love to try it with
SUBSELECTs; but, alas, we are using RHEL 3 which ships with MySQL 3.23.
I don't think RH supports any 4.0 or later versions of MySQL on RHEL 3,
so I'm stuck with 3.23 for the time being.  I had tried a query like
this:

SELECT d.account FROM data AS d, accesslist AS a WHERE
d.account=a.account AND a.username='username'

but it also took quite a bit of time.  Since the problem would appear
for only a few users, I may have to simply hard code a workaround for
the time being and then come back to it later.

Thanks again for all of your help.

Ken.

-----Original Message-----
From: Richard Lynch [mailto:ceo@xxxxxxxxx]
Sent: Monday, January 29, 2007 6:13 PM
To: Ken Dozier
Cc: php-general@xxxxxxxxxxxxx
Subject: Re:  What search algorithm does in_array() use?

On Mon, January 29, 2007 11:20 am, Ken Dozier wrote:
> Does in_array() use a search algorithm (i.e., binary search), or does 
> it check sequentially each element in the array?

Since there is no guarantee that the elements are in any particular
order, it almost has to be sequential...

> I am using in_array() within a while{} loop to check query results 
> against an access-list array to produce a third array containing items

> that successfully passed the comparison test.  Because the two 
> starting arrays in the worst-case scenario can have 8,000 items each, 
> the loop is timing out.
> Advice or alternative methods are appreciated.
>
> Code Sample:
> <?php
> function check_results($results, $access_list) { # Check for $results 
> in array $access_list and
>   # add matches to array $match.
>
>   $result = false;
>   $match = array();
>
>   while ($r = mysql_fetch_row($results))
>   { if ( in_array($r[0], $access_list) )
>     { $match[] = $r; }
>   }
>
>   if ( count($match) > 0 ) { $result = $match; }
>
>   return $result;
> }
> ?>

Ideal #1:
Figure out how to write an SQL query to find what's in the DB, and don't
do any search in PHP at all.

Ideal #2:
Put the values in as keys, and use http://php.net/isset This will "hash"
the values and have an O(1) lookup, I think.
Only works if you know the uniqueness of the values to be searched, or
don't care about duplicates.

--
Some people have a "gift" link here.
Know what I want?
I want you to buy a CD from some starving artist.
http://cdbaby.com/browse/from/lynch
Yeah, I get a buck. So?

--
PHP General Mailing List (http://www.php.net/) To unsubscribe, visit:
http://www.php.net/unsub.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux