【问题标题】:Search in multiple tables在多个表中搜索
【发布时间】:2010-02-16 05:56:16
【问题描述】:

假设我有树表:

[ news ]
    id
    title
    text
    date

[ posts ]
    id
    title
    text
    date

[ gallery ]
    id
    title
    text
    date

如何使用一个查询在这些树表中执行 FULLTEXT 搜索?

我只想在 title 和 text 字段上运行搜索并获得 id、title、date 和 table name 的结果...这可能吗?

» 更新 - 最重要的是:我需要按 FULLTEXT 分数 DESC 对结果进行排序(可能混合不同的表格结果)

【问题讨论】:

    标签: mysql search join full-text-search


    【解决方案1】:

    如果表之间存在合理的关系,则将它们加入该关系。

    如果这些确实是具有不同身份的相同数据,也许应该将它们重新分解为具有 type 字段的单个表。

    【讨论】:

    • @Wallyk - 它们不是相同的数据......只是表结构相似,但还有很多其他字段......而且这些表根本不相关。
    • 所以确实有三个单独的表。 1) 构建另一个表,将所有文本合并到一个全文字段中,或者 2) 执行三个单独的查询。
    【解决方案2】:

    您可以使用 UNION ALL 在一个查询中完成此操作,但您必须使用三个参数——所有三个参数都具有相同的搜索值——并且与执行三个参数相比,它将具有相同的数据库负载,如果不是更多的话单独的查询,因为所有结果都将被拉入一个临时表中进行排序。

    尝试类似:

    SELECT id, title, text, date, relevance
      FROM (
      SELECT id, title, text, date, MATCH(text) AGAINST (?) AS relevance
        FROM news
      UNION ALL
      SELECT id, title, text, date, MATCH(text) AGAINST (?) AS relevance
        FROM posts
      UNION ALL
      SELECT id, title, text, date, MATCH(text) AGAINST (?) AS relevance
        FROM gallery
      ) temp_sort_table
      ORDER BY relevance DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2017-02-15
      • 1970-01-01
      相关资源
      最近更新 更多