【发布时间】:2014-12-25 02:19:56
【问题描述】:
我有 3 张桌子。这里我贴出它的数据库图。
您可以从这里下载数据库代码:https://www.dropbox.com/s/lk956afaxv147h0/testS.sql?dl=0
现在,使用这个数据库并使用“仅”mysql,我需要做以下工作。
1) 给定一个用户 ID,它应该得到一个该用户知道的所有单词的列表,按照他们学习的顺序排序。换句话说,最近学习的单词将位于列表的顶部。
2) 您将从“单词”表中获得包含该特定单词的所有文章的列表
3) 您将扫描此列表并返回表“Article”中包含最多 10 个“未知”单词的所有记录。换句话说,如果该文章包含超过 10 个未出现在用户词汇表中的单词(从表“Words_Learned”中提取),则将其从列表中排除。
4) 然后,您从第 1 步移至列表中的下一条记录。您重复相同的过程,除了跳过从第 3 步返回或作为第 3 步过滤过程的一部分排除的任何文章.
为了实现这个过程,我做了以下
SELECT `words_learned`.`idwords`,
Words.`idArticle`
FROM words_learned
INNER JOIN Words ON Words.idWords = Words_Learned.`idwords`
WHERE words_learned.userId = 1
ORDER BY Words_Learned.`order` DESC
在我的查询中,我已经涵盖了第 1 点和第 2 点。但是我需要做什么才能涵盖第 3 点和第 4 点?
【问题讨论】:
-
3 可以通过一些 GROUP BY 和后聚合过滤(HAVING)来完成
-
@Mihai:感谢您的回复。你能用代码发布一个明确的答案吗?理解起来真的很有帮助。
-
请注意,使用诸如
COUNT之类的关键字和/或诸如ORDER之类的保留字作为表/列标识符是一种灾难。 COUNT 是一个特别奇怪的值,因为它不包含在 MySQL 的保留字列表中 - 但您只需尝试创建一个名为 COUNT 的表! -
@Mihai:喂?请问可以提供代码示例吗?
-
我看到了您的“示例的更多详细信息”,但它们描述的内容与原始任务完全不同。无论如何,您从哪里得到原始描述?听起来好像有一个程序使用不同的SQL语句和数组和循环,有人说:纯SQL应该可以,所以他们把原始程序的步骤写下来,现在必须转换为SQL(即沸腾它归结为:最终要选择什么)。但是,您现在添加的细节/示例令人困惑而不是帮助。是你在什么地方弄到的还是你自己编的?
标签: mysql sql database select join