2013-08-02 116 views
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 

謝謝您的幫助。

+0

爲了獲得有用的答案,你可能必須提供一個[sqlfiddle(http://sqlfiddle.com/ )填入一些樣本數據以使事情更清楚。 –

回答

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; 
+0

這個人就像一個魅力。謝謝@vinodadhikary! – purplizer

+0

@purplizer,不客氣。 – vee

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 
+0

這一個進入無限循環。上面的其他答案就像一個魅力。非常感謝您盡力幫助! – purplizer