加入3个表多对多关系单个查询

时间:2013-03-28 10:22:23

标签: php mysql sql many-to-many

如何为以下

编写一个MYSQL查询

我有3张桌子

我知道登录的user_id是25

Users(id,first_name,last_name)

userproduducts(user_id,product_id)

Product(id,title,description,price)

userproducts是一个多对多的解析表

如何编写一个查询,让我获得first_name的用户的last_nameid=25,并获取user_id = 25 in的产品的产品表中的所有内容userproducts表??

谢谢

3 个答案:

答案 0 :(得分:5)

一个简单直截了当的JOIN会给你你想要的东西:

SELECT 
  u.first_name,
  u.last_name,
  p.*
FROM users              As u
INNER JOIN userproducts AS up ON up.user_id     = u.id
INNER JOIN product      AS  p ON up.product_id  = p.id
WHERE u.id = 25;

答案 1 :(得分:3)

这是通过两个连接完成的。如果您想要获得没有产品的用户,他们应该是LEFT JOINS。

SELECT u.first_name, u.last_name, p.*
FROM users u
LEFT JOIN userproducts up ON u.id = up.user_id
LEFT JOIN product on up.product_id = p.id
WHERE p.id = 25

如果没有产品,产品信息将为空。如果您不想要null产品,请使用INNER JOIN,也可以写为在前面的答案中找到的JOIN。

SELECT u.first_name, u.last_name, p.*
FROM users u
JOIN userproducts up ON u.id = up.user_id
JOIN product on up.product_id = p.id
WHERE p.id = 25

答案 2 :(得分:2)

试试这个

SELECT 
 ut.first_name,
 ut.last_name,
 pt.*
FROM users              As ut
INNER JOIN userproducts AS upro ON upro.user_id     = ut.id
INNER JOIN product      AS  pt ON upro.product_id = pt.id
WHERE ut.id = 25;