我正在尝试在关键字词和网页表之间进行搜索查询。
考虑以下表格。
PAGES
page_id page_name 1 cats 2 dogs 3 humans
关键字
key_id key_name key_page_id 1 purz 1 2 puzy 1 3 ruff 2 4 john 3 5 purz 3
如果搜索词是purz和puzy,我希望查询结果只返回页面ID 1。
SELECT page_id FROM PAGES, KEYWORDS WHERE (key_name='purz OR key_name='puzy') AND key_page_id = page_id;
返回
page_id 1 3
我想要
page_id 1
因为只有purz和puzy都与猫有联系。
答案 0 :(得分:1)
我相信要做到这一点,你必须两次加入关键字表:
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';
答案 1 :(得分:0)
不确定这是否真的有效,但你可以尝试为每个searchterm加入关键字表,例如:
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
答案 2 :(得分:0)
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条件。