2012-09-27 32 views
1

我想基於這些表在我的應用程序中實現搜索功能。如何在Mysql中實現搜索查詢

我有搜索頁面上的5場

  1. 輸入框 - 標題
  2. 作者關鍵字或詞 - 選擇框(AUTHOR_ID將被傳遞給函數的值)
  3. 類別名稱 - 選擇框(category_id將作爲值傳遞給函數)
  4. themonth - 從1 - 12中選擇框
  5. themear - 選擇框從2000 - 2012

我想從基於這些規則創建一個搜索查詢,

  1. 結果陣列將insights進行排序。 read_time,(該文章已閱讀多少次)
  2. 只希望得到articlearticle_id

過早工作工作的例子就是在這裏

我運行以下查詢來獲取,但它是不完整的 https://leading-people.com/search

選擇articlearticle_id FROM article其中 articleis_active ='1'AND(content LIKE'%%'或title LIKE '%%'或tags LIKE'%%')UNION ALL SELECT articlearticle_id FROM keywords INNER JOIN article其中articleis_active = '1' AND(articlearticle_id = keywordsarticle_id AND keywordskeywordtext LIKE '%%')

article TABLE COLUMNS

  • article_id(PRIMARY)
  • is_active
  • title
  • themonth
  • theyear

article_author

點評:此表僅供參考筆者的細節是另一個表。所以這些身份證僅供參考。

COLUMNS

  • article_author_id(PRIMARY)
  • author_id
  • article_id

TABLE article_categories

評論:本表只供參考類別詳細信息是在另一個表。所以這些身份證僅供參考。

COLUMNS

  • article_categories_id(PRIMARY)
  • article_id
  • categories_id

TABLE insights

評論:本表只供參考類別詳細信息是在另一個表。所以這些身份證僅供參考。

COLUMNS

  • insights_id(PRIMARY)
  • article_id
  • read_time

TABLE keyword

評論:本表只供參考類別詳細信息是在另一個表。所以這些身份證僅供參考。

  • keyword_id(主)
  • article_id
  • keywordtext

希望!我已經正確格式化了,所以每個人都能理解!

+0

你真的應該看看這個全文檢索; LIKE'%blah%'查詢將永遠無法利用索引,並且隨着數據集的增長,它們將非常慢。請參閱:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html –

回答

0

掙扎了6,7個小時後,我很驚訝,這是如此簡單:-(

這裏是我想出了

選擇article的解決方案。article_id FROM article其中$ COND(content LIKE '%$長期%' OR title LIKE '%$長期%' OR tags LIKE '%$長期%') 和articlearticle_id IN(SELECT article_categoriesarticle_id FROM article_categories WHERE categories_id LIKE'$ cat')AND articlearticle_id IN(SELECT article_authorarticle_id FROM article_author WHERE author_id LIKE '$作家')

UNION ALL SELECT articlearticle_id FROM keywords INNER JOIN article WHERE $ COND(articlearticle_id = keywordsarticle_id AND keywordskeyword LIKE '%$術語%')AND articlearticle_id IN(SELECT article_categoriesarticle_id FROM article_categories WHERE categories_id LIKE'$ cat')AND articlearticle_id IN(SELECT article_authorarticle_id FROM article_author WHERE author_id LIKE '$作家'。)

0

這可以幫助你在你的追求:

$keyword_mysql= mysql_real_escape_string($keyword); 

SELECT article.article_id 
FROM article 
LEFT JOIN insights ON(article.article_id=insights.article_id) 
WHERE article.is_active = '1' AND (content LIKE '%{$keyword_mysql}%' OR title LIKE '%{$keyword_mysql}%' OR tags LIKE '%{$keyword_mysql}%') 
UNION DISTINCT 
SELECT article.article_id 
FROM keywords INNER JOIN article WHERE article.is_active = '1' AND (article.article_id = keywords.article_id AND keywords.keywordtext LIKE '%{$keyword_mysql}%') 
LEFT JOIN insights ON(article.article_id=insights.article_id) 
ORDER BY insights.read_time 

你也可以逃脫下劃線和百分比在用反斜槓$ keyword_mysql。

如果read_time列不是所選字段的一部分,我不確定排序是否有效。如果沒有,請將其添加到選定的字段,並將其添加到ORDER BY read_time。

+0

提供的SQL不包含任何類別或作者,請幫我完成查詢! –