gpt4 book ai didi

php - SQL索引/关系

转载 作者:行者123 更新时间:2023-11-30 01:09:38 26 4
gpt4 key购买 nike

我正在为帖子的两件事建立索引。一是标题(单词),二是关键词。为此,我选择使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com