我正在开发一个商店系统并遇到搜索问题。搜索包含语言或性别的文章是没有问题的,但我正在努力获取只有所选文章的文章。
这是使用过的表的一个例子:
制品
id | int(11) | Primary Key | auto_increment
name | tinytext |
语言
id | int(11) | Primary Key | auto_increment
lang | tinytext |
article_languages
article_id | int(11) | Primary Key
language_id | int(11) | Primary Key
所以我现在想要知道哪些文章具有该语言(例如英语),而不是其他文章(德语,土耳其语,西班牙语等)。尝试了很多事情但从未得到正确的结果。
这是正确的数据库结构吗?如果是,如何选择正确的行。我的大脑正在杀了我......
希望这些信息足够。
问候 INAD
PS:Sry因为我的英语不好:(答案 0 :(得分:1)
这可能不是最好的方法,但它有效。我的思维过程是我们想要选择只有一种语言的文章,所以首先我们应该找出每篇文章有多少种语言。我这样做是通过article_id对article_languages的结果进行分组,并使用COUNT aggregate function生成'languages_count'。
你不能对派生列使用WHERE子句(我想 - 如果我错了请纠正我)所以我把它作为子查询包装起来,外部查询用WHERE限制结果,也可以通过JOIN获取实际的文章。
因此,此查询将返回所有只有一种语言的文章,无论该语言是什么(我希望这是你想要的,如果没有参考其他答案):
SELECT a.* FROM (SELECT article_id,language_id,COUNT(article_id) AS languages_count FROM article_languages GROUP BY article_id) AS al LEFT JOIN articles AS a ON al.article_id = a.id WHERE al.languages_count = 1;
答案 1 :(得分:0)
例如:
SELECT a.* FROM articles as a, languages as l, article_languages as al WHERE l.id = al.language_id AND a.id = al.article_id AND l.lang = 'ENGLISH';
如果您已经知道语言ID(本例中为1),那么它将是:
SELECT a.* FROM articles as a, article_languages as al WHERE a.id = al.article_id AND al.language_id = 1;