您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> php >> 正文

php开发中实用的两条sql

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-2-2 我要参与讨论

 

这两天项目开发中,需要实现一些比较实用的功能,用了两个使用的sql,总结一下,怕下次忘记了。

1. 检索数据库中跟提交的内容相匹配的内容

比如:提交的数据是“游泳”,那么数据库中有“我喜欢游泳”字样的就算是匹配,但是这样一来,还是不够,比如我提交的是“周末去游泳”,数据库中有“游泳”的内容,其实意思类似,但是却使用like找不到的,于是想到下面的sql,已经封装成函数了:

 function getRelationTags($tagTitle,$cols="*")
 {
  $titleFeildStrLen = 24; //3*8 四个汉字或者24个字符.
  if ("" == $tagTitle) return false;
 
  $sql = "select  $cols from ".$TableName." where title != '' and (LOCATE(title,'$tagTitle') or ((issystem = 1 or LENGTH(title) <= $titleFeildStrLen) and title like '%".$tagTitle."%' )) order by LENGTH(title) ";
  $data  =& $db->getAll($sql);
  if(DB::isError($data)){
   return $this->returnValue($data->getMessage());
  }else{
   return $data;
  }
 }

看sql:

select  $cols from ".$TableName." where title != '' and (LOCATE(title,'$tagTitle') or ((issystem = 1 or LENGTH(title) <= $titleFeildStrLen) and title like '%".$tagTitle."%' )) order by LENGTH(title)

其实就是两次匹配,一次是正向匹配,就是把提交的标签跟数据库中标签进行匹配,第二次是把数据库中的标签跟提交的标签进行匹配。

关键在LOCATE()函数,同时也限制了长度,因为mysql中的编码是:

set names 'utf8'

就是是utf8的,那么一个汉字要占用3个字节,字符只占用1个字节,所以上面的:

  $titleFeildStrLen = 24;

就是8个汉字和24个字符范围那的标签进行匹配。

2. 同类排序

数据库中比如是这样的内容:

北京     1023       1

天津     2301       1

上海    3450&

[1] [2] 下一页

在google里搜索更多php开发中实用的两条sql

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明