我的新闻网站有一个工作搜索功能,但我一直在重写我的代码并重构我的数据库以添加更多功能。以前,我想搜索的所有信息都可以在一个表格中找到。现在有一个新闻文章基本数据表,第二个包含文本(每篇文章可能有多行)。第一个搜索功能很简单:
SELECT *
FROM pages
WHERE page_status != '99'
AND (page_title LIKE '%".mysql_real_escape_string($words)."%' OR page_text LIKE '%".mysql_real_escape_string($words)."%')
ORDER BY page_onlinedate DESC
现在我需要查询多个表,因为'pages.page_text'不再存在。它移动到名为“page_content.content_text”的第二个表,并通过“page_content.content_page_id”链接到“pages.page_id”。
我无法找到如何在没有重复的情况下显示结果(查询每个表一次,并且因为在page_content中可能有多行,所以如果搜索到的单词可能会显示相同的文章四次可以在标题和每个文本行中找到一次)。我想它必须用表连接完成,但连接让我真的很困惑。
再一次,我的数据库布局要清楚:
PAGES
page_id
page_title
page_onlinedate
...
PAGE_CONTENT
content_id
content_text
content_page_id
感谢您的帮助。
答案 0 :(得分:0)
试试这个:
SELECT *
FROM pages
WHERE page_status != '99'
AND ( page_title LIKE '%".mysql_real_escape_string($words)."%'
OR page_id IN (SELECT content_page_id
FROM page_content
WHERE
page_text LIKE '%".mysql_real_escape_string($words)."%'
) )
ORDER BY page_onlinedate DESC
答案 1 :(得分:0)
请试试这个:
select p.*, pc.*
from pages p join page_content pc on p.page_id = pc.content_page_id
where p.page_status != '99'
and (p.page_title like '%" . mysql_real_escape_string($words) . "%' or pc.content_text like '%" . mysql_real_escape_string($words) . "%')
group by p.page_id
order by p.page_onlinedate desc;