我有一个项目属性表和一个 user_favorites 表,其结构如下:
- ID
- item_id
- 用户身份
- 最喜欢的(布尔)
当用户“收藏”一个项目时,它会使用项目 ID、用户 ID 在此表中添加一行,并将收藏属性设置为 1(如果他们“不喜欢”,则将其更改为 0)。
我试图弄清楚如何在用户查看产品列表时显示他们的收藏夹。
我目前根据用户搜索输入进行查询并获得一组产品 ID。现在我想在这些产品中进行查询以创建产品信息表 - 我希望它包括该项目是否是用户最喜欢的。
我试过这样的事情:
select i.tid, i.name as name, i.image as image, (SELECT favorite FROM user_favorites WHERE user_id=77 ) as favorite
FROM items i
left join user_favorites ufav on (ufav.item_id = i.tid)
WHERE i.tid IN (79, 98, 105 . . .)
order by favorite DESC, name ASC
..但当然我得到一个子查询返回超过 1 行错误
我也尝试过这样的事情:
select i.tid, i.name as name, i.image as image, ufav.favorite as favorite
FROM items i
left join user_favorites ufav on (ufav.item_id = i.tid)
WHERE i.tid IN (79, 98, 105 . . .) AND ufav.user_id=77
order by favorite DESC, name ASC
. . . 但这只会返回收藏的项目(如您所料)。我想返回ID 列表中的所有项目,但我也想知道哪些项目没有被“收藏”。
我可以在一个查询中执行此操作,还是我最好的选择是运行两个单独的查询?