php+mysql关于读取用户收藏内容的问题?

网站有个用户收藏的功能,举例有3个数据表

数据表一:favorites(收藏数据)

id type(1为商品,2为文章) cid(文章或商品的id) dateline(收藏日期)

数据表二:goods(商品)
id title

数据表二:articles(文章)
id title

我想先
select * from favorites order by dateline desc
然后通过取得的cid来读取收藏的文章或商品的标题

取标题我认为有2种方法,一种是foreach循环,cid,每一条循环读一次数据库

if($type==1){

select * from goods where id = $value['cid'];

}

另一种方法是读取出来的cid分别放到对应的商品或文章2个数组里,
然后再通过
select * from goods where id in($array_goods);
select * from articles where id in($array_goods);
我觉得第二种方法比第一种方法会高一点,但是用第二种方法我不懂两个数据表(goods, articles)读出来的标题组合起来要怎么按照favorites里的的dateline倒序来排序呢?
望高手指点一下,谢谢各位大佬。

阅读 1.6k
1 个回答

联表,然后取出的时候用 IF 处理一下,如果 type 多了的话,就得用 case then

SELECT IF(goods.id IS NULL, articles.title, goods.title), favorites.*
FROM favorites
LEFT JOIN goods
    ON goods.id = favorites.cid AND favorites.type = 1
LEFT JOIN articles
    ON articles.id = favorites.cid AND favorites.type = 2
ORDER BY dateline DESC

不过如果单次要查询的数据量不是很大的话,还是比较倾向于第二种方式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题