Normally I make something like this.
#1 first query
while () :
#2 2nd queries
#3 3rd queries
endwhile;
to get a result. Now I want to combine them in one query. How can be done with this.
Table#1
----------------------开发者_如何学运维---------------------
SELECT
UserID, UserName, CountryCode, StateCode, CityCode, VillageCode, UserRace, UserStatus, UpdateStatus
FROM user_locality
WHERE CountryCode = '{$getCountryCode}'
Table#2
-------------------------------------------
SELECT
*
FROM user_addresses
WHERE address_UserID = '{$UserID}'
Table#3
-------------------------------------------
SELECT
phone_UserID, phone_m, phone_h, phone_o
FROM user_phones
WHERE phone_UserID = '{$UserID}'
Thank you.
You'll want to use the JOIN
clause. There are different types of joins. I'm using LEFT JOIN
below which will select all records from user_locality
and try to match records from both user_addresses
and user_phones
.
SELECT *
FROM `user_locality`
LEFT JOIN `user_addresses`
ON `user_addresses`.`address_UserID` = `user_locality`.`UserID`
LEFT JOIN `user_phones`
ON `user_phones`.`phone_UserID` = `user_locality`.`UserID`
WHERE `user_locality`.`CountryCode` = '{$getCountryCode}'
The one thing to point out this query will result in more than 1 row for each user that has more than 1 phone or address.
If I've understood you correctly, something like this should work:
SELECT (fields you want) FROM user_phones, user_addresses, user_locality WHERE user_locality.CountryCode = '{$getCountryCode}' AND user_phones.phone_userID = user_locality.UserID AND user_addresses.address_UserID = user_phones.phone_UserID
In general, the beauty of SQL is that you can specify MULTIPEL tables in the FROM field, thus allowing you to do a join by stating the conditions for keeping a combination of rows in the results. For example, if you do
SELECT * FROM table_a, table_b
You'll get every possible combination of rows. So if A has 10 rows and B has 25, you'll get 250 result rows! Adding WHERE table_a.something = table_b.something will give you what you want.
精彩评论