【问题标题】:A SQL query that acquires the list of categories given a page title from Wikipedia从维基百科获取给定页面标题的类别列表的 SQL 查询
【发布时间】:2011-01-25 14:58:02
【问题描述】:

给定一个维基百科页面标题,我想获取它的类别。但是,我似乎无法找到有效的方法。

这是页表: http://www.mediawiki.org/wiki/Manual:Page_table

这里是 categorylinks 表 http://www.mediawiki.org/wiki/Manual:Categorylinks_table

其中 categorylinks.cl_from = page.page_id ...但是,在我的项目中,我将只有一个可能的页面标题,而不是页面 ID。看来 page_title 并不是唯一的。

有没有更好的方法来解决这个问题?

谢谢。

【问题讨论】:

  • 您实际上是在谈论 MediaWiki(不是 Wikipedia)吗?如果是,请更正标签和标题。
  • 我指的是那些维基百科表格。

标签: mysql mediawiki categories


【解决方案1】:

页面标题是唯一的每个命名空间

要在默认命名空间中搜索,请在命名空间 0 中搜索。这是您可能要使用的查询:

SELECT `categorylinks`.`cl_to`
FROM `page`
JOIN `categorylinks` ON `categorylinks`.`cl_from` = `page`.`page_id`
WHERE `page`.`page_namespace` = 0 AND `page`.`page_title` = 'Page_name_here'

【讨论】:

    【解决方案2】:

    AFAIK,page_title 实际上是独一无二的。它由 MediaWiki 逻辑提供:您是否尝试创建两个标题相同的页面?具有两个相同标题页面的 URL 看起来如何?

    因此,您只需要查询两个表,这将通过标题名称从 Page table 获取 page_id,并使用 Categorylikns table 中的 page_id 获取类别列表。

    【讨论】:

    • 是的,这就是我最初的想法,但是如果您查看页表信息,page_title 并未列为“唯一”或任何类型的键。除非那没关系?
    • 我认为,您可以依靠 page_title 的唯一性。我不知道创建具有相同标题的两个页面的任何有效方法。
    • 我测试过了,page_title 不被视为表中的唯一键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多