首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php中的多到多个字段进行标记搜索

使用php中的多到多个字段进行标记搜索
EN

Stack Overflow用户
提问于 2009-09-23 11:02:59
回答 1查看 189关注 0票数 0

我在为简报系统做搜索引擎。

我正在使用多到多关系风格的设置,其中有3个数据库表示关系。

comms_briefings是存储简报的数据的地方,search_tags是存储标记的地方,briefings_tags是关系形成的地方。

我已经有了这段代码,但是由于某种原因,如果一个标记在简报中出现不止一次,它就会在数据库中多次返回相同的行。

例如,如果用户搜索

$“共犯查询”

当有两个匹配的标签时,系统将返回任何有标记的行和查询两次。我希望将结果与获得最多结果的行排序为desc,并且只出现一次。

有什么想法吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-23 11:09:24

像这样的事情应该可以做到:

代码语言:javascript
复制
function searchTags($tags) {

    $tags = explode(' ', $tags);
    $tagIds = array();

    foreach($tags as $key) {
        $sql = mysql_query("SELECT `id` FROM `search_tags` WHERE `tag` = '".$key."'");
        while($r=mysql_fetch_object($sql))
            $tagIds[] = $r->id;
    }

    $query = mysql_query("SELECT comms_briefings.*, COUNT(*) AS num
        FROM comms_briefings, briefings_tags
        WHERE briefings_tags.tag_id IN ('" . implode("','", $tagIds) ."') AND briefings_tags.briefing_id = comms_briefings.id
            GROUP BY comms_briefines.id
        ORDER BY num DESC, `created` DESC"); 

    while($r = mysql_fetch_object($query)) {

        $summation = preg_replace('^(.*)\n(.*)^', '$1\\n$2', $r->summation);
        $summation = preg_replace('/[\r]+/', '', $summation);

        echo '<li class="message unread" id="msg-'.$r->id.'">';
        echo '<h3><a href="">'.$r->title.'</a></h3>';
        echo '<ul class="details">
                <li><span>Importance:</span> '.$r->importance.'</li>
                <li><span>Date:</span> '.$r->created.'</li>
                <li><span>Summary:</span> '.$summation.'</li>
             </ul>
             <div class="clr"></div>
             </li>';
    }
}

所有的tagIds首先被拉到一个数组中,然后对简报执行一个查询,按id分组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1465323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档