问题描述
信息
我有一张桌子,上面列出了动词和形容词。我还有一张列出名词的表格。我的第三个表格是我们的搜索字段。
我想做什么?
我想在我们的搜索字段表中搜索动词+形容词。所以我想找到动词+名词或形容词+名词
示例
我们在搜索字段表中有记录:
- buildawall
- redtree
- countonyou
- purchaseanapple
结论
所以我在动词+形容词表和名词表中有那个词(构建,墙,红色,树,购买,苹果,计数,你)如何通过我的名词和形容词+动词表以正确的顺序找到它们?我所说的正确顺序是动词+名词或形容词+名词
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',(3,'absolute',(4,'adorable',(5,'adventurous',(6,'academic',(7,'acceptable',(8,'acclaimed',(9,'accomplished',(10,'accurate',(11,'aching',(12,'acidic',(13,'acrobatic',(14,'active',(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'),'CD'),'SUV'),'TV'),'aardvark'),'abacus'),'abbey'),'abbreviation'),'abdomen'),'ability')
CREATE TABLE `searchField` (
`id` int(10) UNSIGNED NOT NULL,`word` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `searchField` (`id`,'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