我正在尝试在关键字和页面表之间进行搜索查询。
请考虑以下表格。
页面
page_id page_name1只猫2只狗3人
关键词
key_id key_name key_page_id1 purz 12呕吐13半圆24约翰35 purz 3
如果搜索词是purz AND puzy,我希望查询结果只返回页面id 1。
从页面、关键字中选择page_id其中(key_name='purz或key_name='puzy')AND key_page_id=page_id;
返回
page_id1.3.
我想要
page_id1.
因为只有purz和puzy都与猫有关。
我相信要做到这一点,您必须在关键字表上加入两次:
SELECT p.page_id
FROM pages p
JOIN keywords k ON (k.key_page_id = p.page_id)
JOIN keywords k2 ON (k2.key_page_id = p.page_id)
WHERE k.key_name='purz'
AND k2.key_name='puzy';
不确定这是否真的有效,但您可以尝试将关键字表与每个搜索项本身连接起来,例如:
SELECT searchterm1.key_page_id as page_id FROM KEYWORDS searchterm1
INNER JOIN KEYWORDS searchterm2
ON (searchterm1.key_page_id = searchterm2.key_page_id)
WHERE searchterm1.key_name='purz' AND searchterm2.key_name='puzy';
您甚至不需要加入PAGES表,除非您也需要返回page_name
SELECT p.page_id, COUNT( key_id ) AS keyword_all
FROM PAGES p
JOIN KEYWORDS ON key_page_id = page_id
GROUP BY page_id
HAVING keyword_all = (
SELECT COUNT( key_id ) AS found_k
FROM KEYWORDS
WHERE key_page_id = p.page_id
AND (
key_name = 'purz'
OR key_name = 'puzy'
)
)
我在这里做的是只得到总关键字数与我们寻找的关键字相匹配的页面。
这样,您就不需要多次加入。仅根据所查找的关键字更改子查询中的WHERE条件。