php - SQL索引/关系

标签 php mysql sql

我正在为帖子的两件事建立索引。一是标题(单词),二是关键词。为此,我选择使用 3 个表:

word_index (word,word_id) // al words and keywords are indexed
keyword_rel (word_id,postId) // relations with the keywords
word_rel (word_id,postId) // relations with the the words of the title

现在我正在尝试对此执行适当的搜索查询。仅使用关键字,效果很好。

  SELECT p.postId
  FROM word_index wi
  INNER JOIN keyword_rel kr ON wi.word_id=kr.word_id
  INNER JOIN post p ON p.postId=kr.postId       
  WHERE wi.word LIKE 'input%'
  GROUP BY p.postId

但现在我想包含 word_rel 来在标题中进行搜索。

我尝试了这个,但听起来不对,而且也没有返回所有内容(缺少一些 wi.word):

  SELECT p.postId,wi.word
  FROM word_index wi
  INNER JOIN keyword_rel kr ON wi.word_id=kr.word_id

  INNER JOIN word_rel wr ON wi.word_id = wr.word_id

  INNER JOIN post p ON p.postId=kr.postId 

  INNER JOIN post pi ON pi.postId=wr.postId 

  WHERE wi.word LIKE 'input%'
  GROUP BY p.postId

问题出在 INNER JOIN post p 上,它与 keyword_rel 相关。现在我还需要与 word_rel 相关的内容。有什么好的方法可以做到这一点?

最佳答案

您需要在这里进行 UNION:

  SELECT p.postId, wi.word
  FROM word_index wi
  INNER JOIN keyword_rel kr ON wi.word_id = kr.word_id
  INNER JOIN post p ON p.postId=kr.postId 
  WHERE wi.word LIKE 'input%'
  GROUP BY p.postId

  UNION

  SELECT p.postId, wi.word
  FROM word_index wi
  INNER JOIN word_rel wr ON wi.word_id = wr.word_id
  INNER JOIN post p ON p.postId=wr.postId
  WHERE wi.word LIKE 'input%'
  GROUP BY p.postId

并且由于这可能会返回某些结果两次或更多次(特别是如果单词同时包含在关键字和标题中),您可能需要将上述查询包装到另一个选择不同的:

SELECT DISTINCT t.post_id, t.word
FROM (
    SELECT ...
    UNION
    SELECT
) t
ORDER BY t.word ASC

关于php - SQL索引/关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19544577/

相关文章:

php - laravel 5.2 为 Controller 创建通用功能?必须使用助手吗?

php - Laravel `array_pluck` 任意键

PHP 将字符串修剪为 140 个字符,删除一些字符并添加 URL

mysql - 在 INSERT INTO 问题中使用两个 SELECT FROM 语法

mysql - 如何在 Oracle 中设置变量然后在查询中重用它?

MySQL 选择具有相同列值的行

mysql - 如何以最高效的方式查询这个MySQL表?

php - Laravel 5.4 - php artisan 缓存 :clear does not clear cache files when using 'file' cache driver

mysql - 将 MySQL 文件导入 Oracle SQL Developer

java - Querydsl 忽略 JPA 实体的公用表表达式别名