自定义搜索
上一篇:《拆弹部队.The Hurt Locker》--- 第82届奥斯卡金像奖最佳影片
下一篇:是政府养着老百姓还是老百姓在养着政府;
网站建设:编写一个简易的相关链接搜索引擎
米娅 2010年4月4日 21:32:39

相关链接可以帮助读者找到他/她感兴趣的内容,今天早上赖在床上不想起,胡思乱想设计了个相关链接,着手做,发现还可以,当然,很多改善的空间,感觉像个十分简易的搜索引擎,写下来分享。效果可见右下面

设计思想

首先,建立关键字表 --〉然后,从标题中选出关键字 --〉最后,利用关键字搜索含关键字的标题列表。

关键字表如下

--
-- Table structure for table `c_keywords`
--

CREATE TABLE IF NOT EXISTS `t_keywords` (
  `k_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k_words` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `k_priority` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

这里字段“k_priority”定义该关键字的优先级,最高为10,最低为1;

把程序贴在这里

< ?php
//建立数据库连接,下面是调用连接数据库的类
require_once("require/db.php");
$db = new DB();     
$con= $db->connect(); 
$db_l=$db->sel_db($connection);
 
//读取相关链接
echo "

< FONT color=#FF0000 > 相关链接< BR>";

//按照优先级由大到小读取关键字
$sql_1="select * from t_keywords order by k_priority desc";

$k_words_1=$db->query($sql_1); 

$i=0; //这个数字不仅作为记录计数,在后面也作为跳出循环的判断字

while ( $k_words_r_1 =  $db->fetch_object ( $k_words_1 ) )  //第1层循环,按关键字表提取标题中的关键字

$sql_2="select k_id, k_words, k_priority from t_keywords where
(select subject from t_th where id = '".$id."')
like '%".$k_words_r_1->k_words."%' and k_words='".$k_words_r_1->k_words."'";

$k_words_2=$db->query($sql_2);

while ( $k_words_r_2 =  $db->fetch_object ($k_words_2) )  //第2层循环,按前面“提取的关键字”寻找数据库中含关键字的标题
{      
$sql_3="select id, subject from t_th where
t_th.subject like '%".$k_words_r_2->k_words."%' order by id desc";
 
$th_1=$db->query($sql_3);

while ( $th_r_1 =  $db->fetch_object ($th_1) ) //第3层循环,把找到的标题列出来

$i = $i + 1;
echo "http://coolder.com/".$th_r_1->id."-1-1\">";
echo " ".$i.". ".$th_r_1->subject.""; 
echo "
";     
}   //第3层循环结束

//如果按一个一个的“提取的关键字”找出相关标题列出来,会出现重复现象,为简化计,优先级高的“提取的关键字”能找出相关标题,就结束查询。

if($i>0) 
break;   

}   //第2层循环结束

if($i>0) //同理,结束循环也要跳出
break;

     }   //第1层循环结束

$db->free_result($k_words_1); //释放数据集
$db->free_result($k_words_2); $db->free_result($k_words_1);  

$db->close($con); //关闭数据库连接
? >     


作了点改动:
2楼 2010年4月5日 12:54:09 米娅

        考虑到标题可能没含文章的关键字,在t_th表里添了个字段keywords,在SQL语句$sql_2里用concat连字符把标题和文章的关键字连接起来,在$sql_3里,用or把两个判断连接起了,like作模糊查询,%是通配符。 另外,用“!=”,即不等于,将当前这篇文章排除。SQL语句变化如下:

$sql_2="select k_id, k_words, k_priority from t_keywords where (select concat(subject,keywords) from t_th where id = '".$id."')
like '%".$k_words_r_1->k_words."%' and k_words='".$k_words_r_1->k_words."'";

$sql_3="select id, subject from t_th where ((t_th.subject like '%".$k_words_r_2->k_words."%') or (t_th.keywords like "%".$k_words_r_2->k_words."%')) and id != '".$id."' order by id desc";

      补充一下,注意括号的用法,并且文章的keywords为空时记录返回为空。印象SQL里可以用判断句,我这里图省事,把keywords字段默认置为0了,有时间再改,否则是个质量隐患。

第1页 共1页
相关链接
1. 百万级访问量网站的技术准备工作(转)
2. Visa信用卡官方网站
3. SSL在网站链接的应用
4. Drupal 7: 网站的多语言转换中的Translate(翻译)标签
5. Drupal: 实现网站的多语言转换
6. 官方网站CanadaBenefits,可以搜加拿大的相关福利
7. 找回消失的网站网页
8. 在本网站发有价值原创贴,本人可代做广告条
9. 专业制作网站、广告条、中英翻译、视频处理
10. 使用MSN帐号登陆第三方网站的实现: 开放的MSN连接
11. lsok.net专业网站开发
12. 在网站使用Google地图笔记
13. 开网店卖什么最赚钱?-- 推荐给店主们一个网站
14. 加拿大买卖房的几个网站,备份一下,买房时可能用的上
15. 本网站第五次被“和谐”了?
16. 北京车牌摇号网站网友解读