MySQL Query,获取user_ID然后获取Restaurant_ID然后从3个表中获取restaurantName,该表与用户表中的电子邮件匹配

时间:2014-07-22 06:04:36

标签: php mysql sql

我是MySQL新手,我遇到了JOIN问题。请给我一些如何实现我需要的提示。

我的表:

"user" table:
- user_id
- user_name
- user_email

"favouriteRestaurant" table:
- favrst_id
- user_id
- rst_id

"restaurant" table:
- rst_id
- rst_name
- rst_city
- rst_cuisine
- rst_phone
- rst_latitude
- rst_longitude

我的查询流程:

  1. 获取user_id" WHERE" user_email匹配提供的电子邮件地址。
  2. 如果数据可用,请使用user_id查询" favouriteRestaurant"
  3. 从" favouriteRestaurant"获取匹配rst_id的rst_name表
  4. 我需要的最终数据是:

    1. favrst_id
    2. rst_id
    3. rst_name
    4. rst_city
    5. rst_cuisine
    6. rst_phone
    7. rst_latitude
    8. rst_longitude
    9. 我希望我的解释足够清楚。如果不清楚请询问/评论。非常感谢你。

      以下是实际的SQL(上表是简化的)我到目前为止已尝试但结果绝对不是我想要的。它给了我所有的餐厅,而不是在favRst中匹配。

      SELECT
         user.email,
         user.user_id,
         favourite_rst.restaurant_id,
         favourite_rst.restaurant_id,
         favourite_rst.user_id,
         restaurant.name
      FROM
         user,
         favourite_rst,
         restaurant
      WHERE 
         (user.email = 'user@abc.com')
      

3 个答案:

答案 0 :(得分:3)

你也可以试试这个:

SELECT FR.favrst_id, FR.rst_id, R.rst_name, R.rst_city, 
R.rst_cuisine, R.rst_phone, R.rst_latitude, R.rst_longitude
FROM user U,
favouriteRestaurant FR,
restaurant R
WHERE U.user_email = "aaaa@example.com"
and U.user_id = FR.user_id
and FR.rst_id = R.rst_id

并使用内部联接比较执行时间而不使用内部联接。

答案 1 :(得分:2)

试试这个:

SELECT favrst_id, FR.rst_id, rst_name, rst_city, 
rst_cuisine, rst_phone, rst_latitude, rst_longitude
FROM user U
INNER JOIN favouriteRestaurant FR ON U.user_id = FR.user_id
INNER JOIN restaurant R ON FR.rst_id = R.rst_id
WHERE user_email = "%$email%"

答案 2 :(得分:2)

希望它可以帮到你

SELECT r.* , fr.favrst_id FROM restaurant r LEFT JOIN favourite_rst fr ON r.rst_id = fr.rst_id LEFT JOIN user u ON fr.user_id = u.user_id WHERE u.user_email = "abc@example.com"