Hello all, My script works fine as it is, but I am trying to reduce the number of queries to the database. I am running PHP 4.3.4 and MySQL 4.0.3.
Here is my table structure: mysql> desc application; +-----------------------------+--------------+------+-----+---------+------- ---------+ | Field | Type | Null | Key | Default | Extra | +-----------------------------+--------------+------+-----+---------+------- ---------+ | ID | int(10) | | PRI | NULL | auto_increment | | media_ID | int(5) | | | 0 | | +-----------------------------+--------------+------+-----+---------+------- ---------+ mysql> desc mailbox; +------------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+-------------+------+-----+---------+----------------+ | ID | int(10) | | PRI | NULL | auto_increment | | app_ID | int(5) | | | 0 | | | company_ID | int(5) | | | 0 | | +------------------+-------------+------+-----+---------+----------------+ mysql> desc media; +---------------+---------------------+------+-----+---------+-------------- --+ | Field | Type | Null | Key | Default | Extra | +---------------+---------------------+------+-----+---------+-------------- --+ | ID | int(5) unsigned | | PRI | NULL | auto_increment | | company_ID | int(5) unsigned | | | 0 | | | media_type_ID | int(5) unsigned | | | 0 | | | name | varchar(100) | | | 0 | | | state_ID | tinyint(1) unsigned | | | 0 | | | city | varchar(50) | | | 0 | | +---------------+---------------------+------+-----+---------+-------------- --+ mysql> desc media_type; +-------+-----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------+------+-----+---------+----------------+ | ID | int(5) unsigned | | PRI | NULL | auto_increment | | type | varchar(25) | YES | | 0 | | +-------+-----------------+------+-----+---------+----------------+ mysql> desc state; +------------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+-------------+------+-----+---------+----------------+ | ID | int(5) | | PRI | NULL | auto_increment | | full_name | varchar(25) | YES | | NULL | | | abbreviated_name | char(2) | YES | | NULL | | | region | varchar(25) | YES | | NULL | | +------------------+-------------+------+-----+---------+----------------+ Here is a part of my code. I have a function query_database() that I use to run mysql_connect() and mysql_query with all of the necessary error handling. I also use db_select_val() that returns the first field from the first record of the results. // Get a list of all of the types of media this company has listings $query_type = "select media_type.ID, type from media_type, media where media_type_ID = media_type.ID and company_ID = \"$company_ID\" and deleted_date = \"0\" group by media_type_ID"; $result_type = query_database($query_type); while($row_type = mysql_fetch_assoc($result_type)){ $type_ID = $row_type["ID"]; $type = $row_type["type"]; // Get a count of the number of applications in this company's mailbox that are the same type as // the $type_ID found above $type_count = db_select_val("select count(*) from application, media, mailbox where application.ID = mailbox.app_ID and media.company_ID = mailbox.company_ID and application.media_ID = media.ID and media.media_type_ID = \"$type_ID\" and media.company_ID = \"$company_ID\""); echo "$type $type_count\n"; // Get a list of all of the media locatons this company has listings for this media type $query_state = "select state.abbreviated_name, city, name, media.ID from media, state where state_ID = state.ID and company_ID = \"$company_ID\" and deleted_date = \"0\" and media_type_ID = \"$type_ID\" order by state.full_name, city, name"; $result_state = query_database($query_state); while($row_state = mysql_fetch_assoc($result_state)){ $state = $row_state["abbreviated_name"]; $city = $row_state["city"]; $name = $row_state["name"]; $ID = $row_state["ID"]; // Get a count of the number of applications in this company's mailbox that are associated // with this media location $state_count = db_select_val("select count(*) from application, mailbox where mailbox.app_ID = application.ID and application.media_ID = \"$ID\" and mailbox.company_ID = \"$company_ID\""); echo "$state - $city - $name - $state_count\n"; } } I would like to incorportate each of the queries that uses the count(*) function into the associated query outside the while() loop. Can this be done? I assume that the fewer times I need to query the database, the faster my script will run. Is this true as well? TIA, Ryan Marks -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php