【问题标题】:MySQL SELECT query from multiple tables at the same timeMySQL SELECT 同时从多个表中查询
【发布时间】:2015-11-28 00:24:12
【问题描述】:

我的数据库中有这样的架构:

我想显示特定用户(使用 unique_id 给出)添加到收藏夹中的所有食谱(带有特定字段),这些食谱在表收藏夹中描述(2 个字段 - 用户 ID 和喜欢的食谱)。我不知道该怎么做。

f.e.如果用户喜欢 5 个菜谱,则该信息将包含在最喜欢的表中(他的 id 和他喜欢的菜谱 id)。我想显示字段:

  • recipe.unique_id,
  • recipe.title,
  • recipe.img_tumbnail_link,
  • recipe.add_date,
  • recipe.kitchen_type,
  • recipe.meal_type,
  • user.name,
  • user.surname,
  • COUNT(like.recipe_unique_id_fk) AS like_count

我试着用这个做一些查询:

SELECT recipe.`unique_id`, recipe.`title`, recipe.`img_tumbnail_link`, recipe.`add_date`, recipe.`kitchen_type`, recipe.`meal_type`, user.`name`, user.`surname`, COUNT(`like`.`recipe_unique_id_fk`) AS like_count 
FROM `recipe` 
JOIN `favourite` ON (recipe.`unique_id` = `favourite`.`recipe_unique_id_fk`) 
JOIN `like` ON (recipe.`unique_id` = `like`.`recipe_unique_id_fk`) 
JOIN `user` ON (recipe.`user_unique_id_fk` = user.`unique_id`)
WHERE favourite.`user_unique_id_fk` = '565096811c0b51.08471830' 
ORDER BY recipe.`add_date` DESC

从这样的表中:

使用此查询,我只收到 1 行而不是 3 行,我应该为具有 id 的用户获得:565096811c0b51.08471830。有什么帮助吗?谢谢。

我添加了食谱表和结果:)

这是我的查询结果:

这是所有记录(没有重复):http://postimg.org/image/ejjemnozb/

【问题讨论】:

  • 没有看到数据,我发现很难遍历它。你能在sqlfiddle上放一个样本吗?另外,您是否尝试过省略类似的组件?让我们先从简单的部分开始,然后逐渐添加更多层:)
  • @RichardSeviora 我已经添加了食谱表和我想要的查询结果:)

标签: mysql select inner-join


【解决方案1】:

您正在使用与 like 表的连接,该表只有一行,这就是为什么只返回一行。您可以使用 子查询 计算喜欢。我在下面提到了正确的查询:

SELECT recipe.`unique_id`, recipe.`title`, recipe.`img_tumbnail_link`, recipe.`add_date`, recipe.`kitchen_type`, recipe.`meal_type`, user.`name`, user.`surname`, 
(SELECT count(*) from `like` WHERE recipe.`unique_id` = `like`.`recipe_unique_id_fk`) AS like_count
FROM `recipe` 
JOIN `favourite` ON (recipe.`unique_id` = `favourite`.`recipe_unique_id_fk`) 
JOIN `user` ON (recipe.`user_unique_id_fk` = user.`unique_id`)
WHERE favourite.`user_unique_id_fk` = '565096811c0b51.08471830' 
ORDER BY recipe.`add_date` DESC

【讨论】:

  • 看起来还不错。我刚刚将记录添加到喜欢表而不是最喜欢的表:D Thx 现在它可以工作了:) 你能否也检查一下:pastebin.com/LsRtwSeX(它选择前 5 个食谱)。它工作正常,但可以更简单吗?
  • 这个查询也有同样的错误。只需使用我上面提到的查询,在末尾添加一个 `LIMIT 5`
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多