【问题标题】:How to write such SQL query statement?如何编写这样的 SQL 查询语句?
【发布时间】:2014-08-11 04:17:31
【问题描述】:

我有四个表:食物、食谱、用户和活动。

活动表具有架构:

mysql> describe activities;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id   | int(11)      | YES  | MUL | NULL    |                |
| recipe_id | int(11)      | YES  | MUL | NULL    |                |
| name      | varchar(255) | YES  |     | NULL    |                |
| amount    | int(11)      | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

recipes 表具有架构:

mysql> describe recipes;
    +--------------+--------------+------+-----+---------+----------------+
    | Field        | Type         | Null | Key | Default | Extra          |
    +--------------+--------------+------+-----+---------+----------------+
    | id           | int(11)      | NO   | PRI | NULL    | auto_increment |
    | image_url    | varchar(255) | YES  |     | NULL    |                |
    | user_id      | int(11)      | YES  | MUL | NULL    |                |
    | food_id      | int(11)      | YES  | MUL | NULL    |                |
    +--------------+--------------+------+-----+---------+----------------+

foods-recipes 是一对多的关系,recipes-activity 是多对多的关系。

现在我想选择所有关于食物的用户活动。如果用户对食物的食谱采取行动,我认为他对食物采取行动。如果用户对同一种食物的多个食谱进行操作,则应该只计算一个。

谁能告诉我如何编写查询?

【问题讨论】:

  • 请阅读规则。您不得询问自己未尝试过的问题的答案!规则:不要问你还没有试图找到答案的问题(展示你的作品!)
  • @Mtn_Wolf 是这样吗? See your first question in SO
  • 他不是在寻求解决问题的办法。他们要求一种方法来解决他的情况。
  • 使用JOIN
  • @serakfalcon,我不知道如何检测那些链接到相同食物的食谱。这些活动应该只计算一次。

标签: mysql


【解决方案1】:
SELECT DISTINCT activities.user_id,recipes.food_id 
FROM activities 
INNER JOIN recipes ON recipes.id = activities.recipe_id

应该从用户在活动中使用的食谱中提取每种食物的 ID。 DISTINCT 确保没有重复。

【讨论】:

  • 这将选择不同的 user_ids。但是如果用户 1 对食物 1 和 2 进行了操作,则应该计算两次。
  • 不,它选择不同的用户/食物对。您是否尝试过运行查询? techonthenet.com/mysql/distinct.php
  • 对不起。我试过了,但第一次犯了错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多