我试图将同一张表“ travel_plan”连接两次,因为我需要的值是location_from
和location_to
,然后可以在其中将值连接到我的城市表以获取城市名称。
SELECT * FROM travel_plan
LEFT JOIN Cities ON Cities.CityID = travel_plan.location_to AS plan_to
LEFT JOIN Cities ON Cities.CityID = travel_plan.location_from AS plan_from
LEFT JOIN user_table ON travel_plan.user_id = user_table.id
ORDER BY date_from DESC LIMIT 0,4") or die(mysql_error());
最佳答案
当您多次连接同一张表时,需要正确使用表别名,就像在此查询中使用Cities
一样。
SELECT *
FROM travel_plan AS tr
LEFT JOIN Cities AS C1 ON C1.CityID = tr.location_to
LEFT JOIN Cities AS C2 ON C2.CityID = tr.location_from
LEFT JOIN user_table AS us ON tr.user_id = us.id
ORDER BY date_from DESC
LIMIT 0,4
您编写查询的方式中,LEFT JOIN AS子句放错了位置,并且没有用于限定列名。
但是,对
SELECT *
的这种使用实际上是次优的。从这个四表的JOIN中,SELECT *
取消了很多重复名称的列,这弄乱了php中的_fetch_assoc()
方法。最好的选择是枚举您获取的列,并提供别名,以使它们不会以相同的名称结尾。我不知道您的列的名称,所以我不得不猜测,但是这样的话。
SELECT us.name, us.id AS userid,
C1.cityname AS to_cityname,
C2.cityname AS from_cityname,
FROM ....
然后,在获取每一行之后,您将在$ result ['from_cityname']中找到值。