繁体   English   中英

PHP/MySQL 搜索引擎查询相关表中的关键字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM