使用用户保存的产品的所有产品列表

时间:2017-06-19 20:48:52

标签: mysql sql

我在尝试找出一个查询时遇到问题,该查询允许我显示所有产品的列表,以及显示用户是否保存了任何特定产品。

我有3个表参与查询(users,product_user,product)。 我通过加入三个表并使用以下查询检查user_id是否为null来确定用户是否已保存产品:

SELECT products.*, users.id as 'user_id' FROM products
       LEFT JOIN product_user ON  products.id = product_user.product_id
       LEFT JOIN users ON product_user.user_id = users.id AND users.id =1;

但是,当用户保存产品(user_id null版本和user_id = 1版本)时,这会返回重复的行。不同的语句不起作用,因为在这种情况下行不是不同的。什么是确保我只收回不同产品的最佳做法?我需要取回整个产品列表,无论用户是否保存了它。

这是在mysql中查询的。

1 个答案:

答案 0 :(得分:1)

我认为这可以满足您的需求:

select p.*,
       (select pu.user_id
        from product_user pu
        where pu.product_id = p.id and pu.user_id = 1
        limit 1
       ) as user_id
from products p;

product只返回一行。该行只有user_id - 只有一次,它必须匹配您传入的任何内容。