[英]PHP/MySQL Search Engine Query for keywords in a related table
我正在尝试为我的网站创建搜索 function。 我有一个名为“发布”的主表,其中包含要搜索的所有主要页面。 我有第二个表,称为releases_index,其中包含每个页面的关键字。
例子:
发布:
# releases_id, releases_title
'10001', 'Scarlet Witch'
'10002', 'Vision'
发布索引:
# 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 执行此操作
这是我用来实现此目的的版本:
SELECT index_releaseId, GROUP_CONCAT(index_value) as idx_values
FROM releases_index
GROUP BY index_releaseId
HAVING idx_values LIKE '%scarlet%'
AND idx_values LIKE '%witch%'
AND idx_values LIKE '%wandavision%'
旁注: GROUP_CONCAT是特定于供应商的 function 并且仅在 MySQL/MariaDB 中可用
当您搜索必须有效的每个搜索词时
CREATE TABLE table1 ( `index_id` VARCHAR(3), `index_releaseId` VARCHAR(7), `index_value` VARCHAR(15) ); INSERT INTO table1 (`index_id`, `index_releaseId`, `index_value`) VALUES ('1', '10001', 'Scarlet Witch'), ('2', '10001', 'Television'), ('3', '10001', 'WandaVision'), ('4', '10002', 'Vision'), ('5', '10002', 'Television'), ('6', '10002', 'WandaVision');
SELECT DISTINCT `index_releaseId` FROM table1 t1 WHERE EXISTS(SELECT 1 FROM table1 WHERE `index_releaseId` = t1.`index_releaseId` AND `index_value` LIKE '%Scarlet%') AND EXISTS(SELECT 1 FROM table1 WHERE `index_releaseId` = t1.`index_releaseId` AND `index_value` LIKE '%Witch%') AND EXISTS(SELECT 1 FROM table1 WHERE `index_releaseId` = t1.`index_releaseId` AND `index_value` LIKE '%WandaVision%')
| index_releaseId | |:-------------- | | 10001 |
db<> 在这里摆弄
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.