我有一个项目属性表,以及一个user_favorites表,结构如下:
> id
> item_id
> user_id
>最爱(布尔)
当用户“收藏”某个项目时,它会使用项目ID,用户ID向该表添加一行,并将favorite属性设置为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
..但当然我得到一个Subquery返回超过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列表中的所有项目,但我也想知道哪些项目没有被“收藏”.
我可以在一个查询中执行此操作,还是运行两个单独查询的最佳选择?