2010-08-31 65 views
0

我正在尝试使查询返回3篇与用户正在阅读的文章相关的文章。为此,我制作了一套与所有文章相关的标签(最多5篇标签文章)。Mysql相关文章

  • 如何构建我的查询返回3篇相关文章的最有效方法?
  • Incase没有相关的文章 - 如何返回3个随机?

这是我有:

CREATE TABLE IF NOT EXISTS `j_news` (
    `n_id` smallint(5) NOT NULL AUTO_INCREMENT, 
    `n_title` varchar(94) COLLATE utf8_danish_ci NOT NULL, 
    `n_text` text COLLATE utf8_danish_ci NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=25 ; 


CREATE TABLE IF NOT EXISTS `j_news_tags` (
    `nt_id` mediumint(7) NOT NULL AUTO_INCREMENT, 
    `nt_news_id` mediumint(7) NOT NULL, 
    `nt_tag` varchar(24) COLLATE utf8_danish_ci NOT NULL, 
    PRIMARY KEY (`nt_id`), 
    KEY `nt_news_id` (`nt_news_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=1 ; 

回答

2

如果你真的考虑性能I would suggest you read up this question我有一段时间前。它处理大型数据库,并在不同的查询(所有处理标签)上都有基准。

为了缩短它的SQL会是这样:

SELECT DISTINCT p . * 
FROM projects p 
JOIN projects_to_tags pt ON pt.project_id = p.num 
JOIN projects_to_tags x ON x.tag_id = pt.tag_id 
AND x.project_id = x -- x is your project ID number 
+0

我曾尝试下面的查询语句: $ get_entries =请求mysql_query(“SELECT DISTINCT n.n_id,n.n_title,N。 n_text FROM j_news n JOIN j_news_tags nt ON nt.nt_news_id = n.n_id JOIN j_news_tags x ON x.nt_id = nt.nt_id AND x.nt_news_id =“。$ news_id。”LIMIT 0,3“)或die(mysql_error()) ; 虽然它不按预期工作,因为它只返回用户已在查看的文章 我很乐意提供建议! 感谢: - ) – Kristian 2010-08-31 11:20:49

+0

@kris在链接的问题中,你会发现代码来重新创建我的示例查询的表和条件。然后,适应它在你的桌子上工作应该是非常简单的。 – Frankie 2010-08-31 11:31:22

+0

我现在工作了。谢谢! – Kristian 2010-08-31 12:50:14