【发布时间】:2021-06-30 21:54:08
【问题描述】:
我正在尝试为我的网站创建搜索功能。我有一个名为“发布”的主表,其中包含要搜索的所有主要页面。我有第二个表,名为releases_index,其中包含每个页面的关键字。
示例:
发布:
# releases_id, releases_title
'10001', 'Scarlet Witch'
'10002', 'Vision'
releases_index:
# index_id, index_releaseId, index_value
'1', '10001', 'Scarlet Witch'
'2', '10001', 'Television'
'3', '10001', 'WandaVision'
'4', '10002', 'Vision'
'5', '10002', 'Television'
'6', '10002', 'WandaVision'
我正在努力创建一个可以返回正确结果的 SQL 查询。例如,如果我在网站上搜索“猩红女巫”,我希望它返回 index_releaseId 10001。如果我搜索“猩红女巫 wandavision”,我也希望它返回这个。
最初我尝试使用类似下面的方法来执行此操作,但问题是它正在寻找包含整个搜索查询的行,而不是与所有查询词匹配的发布 ID。
WHERE index_value LIKE '%scarlet%' AND index_value LIKE '%witch%' AND index_value LIKE '%wandavision%'
谁能建议最好的方法是什么?我在 PHP 中使用 PDO/MySQL 执行此操作
【问题讨论】:
-
你想要 100001 和 100002 以及所有其他至少有一个 seachwordsß
-
@nbk 这里没有 100001
-
那是因为您使用
AND作为所有术语,因此它们必须匹配所有单词(不应为您的示例数据返回任何内容),尝试将其更改为OR应该可以把戏 -
@jumper85 将返回与所有搜索词不匹配的版本 ID,这不是我想要的