MySQL-Query获取仅使用所选语言的文章

时间:2011-05-09 16:09:16

标签: php mysql

我正在开发一个商店系统并遇到搜索问题。搜索包含语言或性别的文章是没有问题的,但我正在努力获取只有所选文章的文章。

这是使用过的表的一个例子:

制品

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因为我的英语不好:(

2 个答案:

答案 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;