A possible problem when selecting * from multiple tables is that you have duplicate field names in those tables. For instance, if you have a table structure that looks something like this:
////////////
//--CITY--//
//city_id //
//name //
//state_id//
////////////
//////////////
//--STATE-- //
//state_id //
//name //
//country_id//
//////////////
then when you run something like "SELECT * FROM city, state WHERE state.state_id='VA' AND state.state_id=city.state_id" MySQL won't know what to do when it encounters "state_id" and "name" twice. Your best bet is to explicitly list which fields you want instead of just selecting everything. This is also generally more efficient since you rarely need all the information from multiple tables you are doing a join on. In the above example you probably would only really want the city_id(s) and name(s) back since you already know the state. So something like this would be more appropriate:
"SELECT city.city_id, city.name FROM city, state WHERE state.state_id='VA' AND state.state_id=city.state_id"
Unfortunately, once you have selected fields like this I don't think you can use mysql_fetch_array to get the values (please correct me if I'm wrong on this). You have two options now to access the data from the query.
1) You can use mysql_fetch_row like this:
"list($city_id, $name) = mysql_fetch_row($row);"
2) You can change your query so that you can use mysql_fetch_array. Your query needs to be something like:
"SELECT city.city_id as city_id, city.name as city_name FROM city, state WHERE state.state_id='VA' AND state.state_id=city.state_id"
Now when you call mysql_fetch_array you city.city_id will be returned as city_id and city.name will be returned as city_name. (You can name these whatever you would like.)
Now, on to your next question...
Hope that helps.