0

ニュース Web サイトの検索機能は機能していましたが、機能を追加するためにコードを書き直し、データベースを再構築しています。以前は、検索したいすべての情報が 1 つのテーブルで見つかりました。これで、ニュース記事の基本データ用のテーブルと、テキストを含む 2 番目のテーブル (記事ごとに複数の行になる可能性があります) があります。最初の検索機能は簡単でした:

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」という名前の 2 番目のテーブルに移動し、「page_content.content_page_id」で「pages.page_id」にリンクされています。

重複せずに結果を表示する方法がわかりません (すべてのテーブルを 1 回クエリし、page_content に複数の行がある可能性があるため、検索された単語が見つかった場合、たとえば同じ記事を 4 回表示できます)。タイトルとすべてのテキスト行に 1 回)。テーブルの結合で行う必要があると思いますが、結合は本当に混乱します。

もう一度、データベースのレイアウトを明確にします。

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 に答える