php - 在表中搜索动词+名词
问题描述
信息
我有一张列出动词和形容词的表格。我还有一张列出名词的表格。我的第三张表是我们的搜索字段。
我想做什么?
我想在我们的搜索字段表中搜索动词 + 形容词。所以我想找到动词+名词或形容词+名词
例子
我们的搜索字段表中有记录:
- 建墙
- 红树
- 数友
- 购买苹果
结论
所以我的动词+形容词表和名词表中有这些词(build,wall,red,tree,purchase,apple,count,you) 我怎样才能按我的名词和形容词+动词表的正确顺序找到它们?我的意思是正确的顺序应该是动词+名词或形容词+名词
Ps:你知道有时我们需要英语介词。但我不介意他们在那次搜索中。不要介意介词这些类型的结果对我来说是正确的:
动词+(任何字符)+名词
形容词+(任何字符)+名词
我试过什么?
好吧,我尝试了一个 sql 查询:
SELECT * FROM adjectiveVerbList INNER JOIN searchField ON searchField.text LIKE CONCAT('%',adjectiveVerbList.word, '%')
但正如您所见,这个查询只是一个简单的类似查询。这没用。顺便说一句,我可以用 php 或只是一个 sql 查询来做这没关系。
编辑:我的表:
CREATE TABLE `adjectiveVerbList` (
`id` int(10) UNSIGNED NOT NULL,
`word` varchar(100) NOT NULL,
`type` enum('adjective','verb') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `adjectiveVerbList` (`id`, `word`, `type`) VALUES
(1, 'abandoned', 'adjective'),
(2, 'able', 'adjective'),
(3, 'absolute', 'adjective'),
(4, 'adorable', 'adjective'),
(5, 'adventurous', 'adjective'),
(6, 'academic', 'adjective'),
(7, 'acceptable', 'adjective'),
(8, 'acclaimed', 'adjective'),
(9, 'accomplished', 'adjective'),
(10, 'accurate', 'adjective'),
(11, 'aching', 'adjective'),
(12, 'acidic', 'adjective'),
(13, 'acrobatic', 'adjective'),
(14, 'active', 'adjective'),
(2363, 'whip', 'verb')
CREATE TABLE `nounList` (
`id` int(10) UNSIGNED NOT NULL,
`word` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Tablo döküm verisi `nounList`
--
INSERT INTO `nounList` (`id`, `word`) VALUES
(1, 'ATM'),
(2, 'CD'),
(3, 'SUV'),
(4, 'TV'),
(5, 'aardvark'),
(6, 'abacus'),
(7, 'abbey'),
(8, 'abbreviation'),
(9, 'abdomen'),
(10, 'ability')
CREATE TABLE `searchField` (
`id` int(10) UNSIGNED NOT NULL,
`word` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `searchField` (`id`, `word`) VALUES
(1, 'buildawall')
(2, 'redtree')
(3, 'greenmybuild')
...
输入
buildawall(来自 searchField 表)
输出
这是正确的,因为我们有来自adjectiveVerbList的“build”词和来自nounList表的“wall” 。并且构建在墙之前,因此它是可读的。
解决方案
更改为您的对象名称。我将数据放入前面的 WITH 子句中,我将标记“真实”查询的开始位置。不过,你没有指定你想要的输出,所以我只是假设了一些东西。我使用了与您的第一个搜索词组匹配的数据。
WITH
-- input ....
phrases(id,phrase) AS (
SELECT 1,'buildawall'
UNION ALL SELECT 2,'redtree'
UNION ALL SELECT 3,'countonyou'
UNION ALL SELECT 4,'purchaseanapple'
)
,
adjectiveverblist (id,word,type) AS (
SELECT 1,'build' ,'verb'
UNION ALL SELECT 2,'red' ,'adjective'
UNION ALL SELECT 3,'count' ,'verb'
UNION ALL SELECT 4,'purchase' ,'verb'
)
,
nounlist(id,word) AS (
SELECT 1,'wall'
UNION ALL SELECT 2,'tree'
UNION ALL SELECT 3,'you'
UNION ALL SELECT 4,'apple'
)
-- end of input - real query starts here ...
SELECT
phrase
, av.word AS adjective_verb
, av.type AS av_type
, n.word AS noun
FROM phrases
JOIN adjectiveverblist av ON phrase LIKE '%' + av.word + '%'
JOIN nounlist n ON phrase LIKE '%' + n.word + '%'
;
-- out phrase | adjective_verb | av_type | noun
-- out -----------------+----------------+-----------+-------
-- out redtree | red | adjective | tree
-- out buildawall | build | verb | wall
-- out countonyou | count | verb | you
-- out purchaseanapple | purchase | verb | apple
推荐阅读
- json - 数据帧到 JSON 的转换
- gitlab-ci - 如何在 GitLab 管道中运行安全代码扫描?
- c++ - 如何使用模板类在 C++ 中正确进行多重继承?
- c# - ASP.NET Core web.config 位置使用
- vue.js - 通过 axios 发出 Post 请求时将 HttpListenerContext.User 设为 null
- coq - Inductive 和 CoInductive 之间的唯一区别是对它们的使用(在 Coq 中)进行格式良好的检查吗?
- sql - oracle数据库中如何使用过滤查询
- embedded - 刷新图像与复制文件
- python - Pandas 生成器作为索引器
- r - 每组变异,然后解组