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