【问题标题】:Mysql related articlesmysql相关文章
【发布时间】:2010-08-31 09:45:25
【问题描述】:

我正在尝试让查询返回 3 篇与用户正在阅读的文章相关的文章。为此,我制作了一个表格,其中包含一组与所有文章相关的标签(每篇文章最多 5 个标签)。

  • 如何构建查询以最有效地返回 3 篇相关文章?
  • 如果没有相关文章 - 如何返回 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 ;

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果您真的在考虑性能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
    

    【讨论】:

    • 我尝试了以下查询语句: $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加入 j_news_tags x ON x.nt_id = nt.nt_id AND x.nt_news_id = ".$news_id." LIMIT 0,3") 或 die(mysql_error());虽然它没有按预期工作,因为它只返回用户已经在查看的文章,但我愿意接受建议!谢谢:-)
    • @kris 在链接的问题中,您将找到重新创建表和我的示例查询条件的代码。然后,让它适应你的桌子应该很简单。
    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2010-11-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多