通常我会做这样的事情。
#1 first query
while () :
#2 2nd queries
#3 3rd queries
endwhile;
得到一个结果。现在我想在一个查询中组合它们。怎么办呢。
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}'
谢谢。
答案 0 :(得分:2)
您需要使用JOIN
子句。有不同类型的连接。我在下面使用LEFT JOIN
,会选择user_locality
中的所有记录,并尝试匹配user_addresses
和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}'
指出此查询的一件事是每个拥有1个以上电话或地址的用户会产生超过1行的行。
答案 1 :(得分:0)
如果我理解正确的话,这样的事情应该有效:
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
通常,SQL的优点在于您可以在FROM字段中指定MULTIPEL表,从而允许您通过声明在结果中保留行组合的条件来进行连接。例如,如果你这样做
SELECT * FROM table_a, table_b
您将获得所有可能的行组合。因此,如果A有10行而B有25行,那么你将获得250行结果!添加WHERE table_a.something = table_b.something将为您提供所需的内容。