如何在Mysql中实现搜索查询

时间:2012-09-27 09:42:17

标签: php mysql

我想基于这些表在我的应用程序中实现搜索功能。

我在搜索页面上有5个字段

  1. 输入框 - 标题中的关键字或任何字词
  2. 作者 - 选择框(author_id将作为值传递给函数)
  3. 类别名称 - 选择框(category_id将作为值传递给函数)
  4. themonth - 从1 - 12
  5. 中选择Box
  6. 他们 - 从2000年至2012年选择Box
  7. 我想根据这些规则创建搜索查询

    1. 结果数组将按insights排序。read_time,(文章被阅读的次数)
    2. 只想获得articlearticle_id
    3. 这里有成熟的工作实例

      我正在运行以下查询以获取但不完整 https://leading-people.com/search

        

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

      article COLUMNS

      • article_id(主要)
      • is_active
      • title
      • themonth
      • theyear

      article_author

      评论:此表仅供参考作者详细信息在另一个表中。所以这些id仅供参考。

      • article_author_id(主要)
      • author_id
      • article_id

      article_categories

      评论:此表仅供参考类别详细信息在另一个表中。所以这些id仅供参考。

      • article_categories_id(主要)
      • article_id
      • categories_id

      insights

      评论:此表仅供参考类别详细信息在另一个表中。所以这些id仅供参考。

      • insights_id(主要)
      • article_id
      • read_time

      keyword

      评论:此表仅供参考类别详细信息在另一个表中。所以这些id仅供参考。

      • keyword_id(主要)
      • article_id
      • keywordtext

      希望!我已经正确格式化,所以每个人都可以理解!

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

经过6,7个小时的努力,我很惊讶它很简单: - (

这是我提出的解决方案

  

SELECT articlearticle_id FROM article WHERE $ cond(content LIKE'%$ term%'或title LIKE'%$ term%'或tags LIKE'%$ term%')           和articlearticle_id IN(SELECT article_categoriesarticle_id FROM article_categories WHERE categories_id LIKE'$ cat')和articlearticle_id IN(SELECT article_authorarticle_id FROM article_author WHERE author_id LIKE'$ author')

     

UNION ALL SELECT articlearticle_id FROM keywords INNER JOIN   article WHERE $ cond(articlearticle_id =   keywordsarticle_idkeywordskeyword LIKE'%$ term%')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'$ author')