0

我的新闻网站有一个可用的搜索功能,但我一直在重写我的代码并重组我的数据库以添加更多功能。以前,我想搜索的所有信息都可以在一张表中找到。现在有一个用于新闻文章基本数据的表,还有一个包含文本的表(每篇文章可以是多行)。第一个搜索功能很简单:

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 

谢谢您的帮助。

4

2 回答 2

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;
于 2013-08-02T14:35:20.823 回答
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 
于 2013-08-02T14:34:47.470 回答