|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
这两天项目开发中,需要实现一些比较实用的功能,用了两个使用的sql,总结一下,怕下次忘记了。 1. 检索数据库中跟提交的内容相匹配的内容 比如:提交的数据是“游泳”,那么数据库中有“我喜欢游泳”字样的就算是匹配,但是这样一来,还是不够,比如我提交的是“周末去游泳”,数据库中有“游泳”的内容,其实意思类似,但是却使用like找不到的,于是想到下面的sql,已经封装成函数了: function getRelationTags($tagTitle,$cols="*") 看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 天津 4520 1 北京 3902 1 那么我要提取所有的城市数据,并且把每种城市数据的总数跟别的城市总数进行比较后排序。 函数代码如下: function getMostCity($num) { $sql = "select count(id) as num,city from ".$TableName." where city != \\'\\' group by city order by num desc limit 0,$num;"; $data =& $db->getAll($sql); if($db->isError($data)) return false; else return $data; } 我们关注一下上面的sql语句: select count(id) as num,city from ".$TableName." where city != \\'\\' group by city order by num desc limit 0,$num 核心就是 group by city 把类似城市集中起来后按照多到少排序。 Author: heiyeluren writeTime: 2005-07-01 14:35 返回类别: 教程 上一教程: 表单验证之PHP代码框架 下一教程: 开发大型PHP项目的方式(二) 您可以阅读与"php开发中实用的两条sql"相关的教程: · 浅议PHP程序开发中的模板选择 · PHP开发中文件操作疑难问答 · date.inc.php3,模仿SQLSERVER的两个函数:dateadd(),datediff() · PHP和MySQL开发的8个技巧 · 通过PHP连接MYSQL的两种方式(1) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |