Archive for the ‘程序开发’ Category

第 5 页,共 5 页12345

MySQL单表多字段模糊查询解决方法

在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段

例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍。然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录。

可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:

  1. 在插入记录的同时,将需要进行多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。
  2. 使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL默认FT最小字节为4),而且并不利于今后的维护。

在网上爬了两天,对此问题的处理都没有找到满意的解决方法,最后在《MySQL权威指南》中翻到了CONCAT的使用方法,在书中的对CONCAT的描述是:

CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。

因此,前文的查询可以通过下面这个SQL查询实现
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%关键字%’

解决WordPress分页Bug

发现这个问题很久了,在使用自定义永久链接格式时,首页的分页链接不正确

例如本站网址是 http://www.raychou.com ,WordPress安装在 /chou/ 目录下,首页的page2链接却为 /chou/chou/page/2 ,多了一个chou,估计安装在根目录下不会有这种问题,解决的方法也很简单

编辑 wp-includes/functions-formatting.php 文件,大概在第380行有这么一行代码

$qstr = wp_specialchars($_SERVER['REQUEST_URI']);

在其下面添加一行

$qstr = trailingslashit($qstr);

原因是之前的代码获取URL Path时,最后面是不带 “/” 的,而后面的 $home_root 变量则是带 “/” ,所以造成了第392行进行正则处理URL时处理错误。

用CSS实现字符串自动截取

在WEB开发中,最常遇到的一个问题就是字符串的截取,一般的实现方法有两种,一是通过脚本,例如PHP中的substr。其二就是使用CSS了。

CSS代码如下:

.sub_title {
        width: 190px;
        overflow: hidden;
        white-space: nowrap;
}

相应的HTML如下:

<span class="sub_title">这是一个很长很长很长很长很长很长很长很长很长很长的标题</span>

制作自己的天气预报站点

一直以来都只提供了天气预报的RSS输出,有很多网友都问我如何将这些数据应用到自己的网站上面,下面我来提供一个简单的例子

效果如下图所示。演示网址 http://www.anziji.com/

不过不同的是这个演示用的AJAX实现,所以在程序中文字通过mb_convert_encoding转换成的UTF-8

weather.jpg

// 自定义函数用于读取rss文件内容
function getFile($url){
if($f=@fopen("$url","r"))
{
while(!@feof($f))
{
$s.=@fgets($f);
}
@fclose($f);
}
return $s;
}
 
// 读取rss文件内容到变量,通过URL传递id参数
$xml = getFile("http://www.raychou.com/weather/rss.php?id={$_GET['id']}");
 
// 使用正则获取相关天气信息到数组
preg_match_all('/([sS]*?)/',$xml,$weather);
preg_match_all('/([sS]*?)/',$xml,$temperature);
preg_match_all('/([sS]*?)/',$xml,$wind);
preg_match_all('/([sS]*?)/',$xml,$trend);
$day = array('今天','明天','后天');
 
// 输出
for($i = 0;$i < 3;$i++) {
$string .="
&lt;ul&gt;<br/>&lt;li&gt;" . mb_convert_encoding($day[$i],"UTF-8","GB2312") . "&lt;/li&gt;
&lt;li&gt;{$weather[1][$i]}&lt;/li&gt;
&lt;li&gt;{$temperature[1][$i]}&lt;/li&gt;
&lt;li&gt;{$wind[1][$i]}&lt;/li&gt;
&lt;li&gt;{$trend[1][$i]}&lt;/li&gt;
&lt;/ul&gt;
";
}
echo $string;

解决Lightbox和aLinks的冲突

今天意外发现点击aLinks关键词时都会出现Lightbox的动态图片框,经过分析代码发现Lightbox会在aLinks链接最后自动加上 rel=”lightbox” 用以标识为Lightbox链接,

通过分析插件 lightbox-plugin.php 源码,发现在程序第137行有这样一句

   if(preg_match('/.('.IMAGE_EXTENSIONS.')/i', $link))

IMAGE_EXTENSIONS 的定义为 ‘jpg|jpeg|png|gif|bmp|ico’

即程序先提取所有超链接,然后通过正则分析链接中是否存在图片格式的关键字,如果存在,则判断其为一个Lightbox链接并在末尾加上标识

知道原因就好办了,因为aLinks也会在链接中加上rel标识自己,所以只要先通过正则判断链接中是否已存在rel表示,无则加上Lightbox标识,程序修改如下

   if(preg_match('/.('.IMAGE_EXTENSIONS.')/i', $link) &amp;&amp;
   !preg_match('/(rel)/i', $link) )

花了一个通宵重做了一套新的风格

还是看不惯之前那套乳白色的模板,感觉不够大气,而且三栏的布局方式也使得页面的有效空间太小,于是花了一上午的时间在网上浏览网站寻找灵感。最后参考Maxthon PassPort的页面重新制作了这个风格,兼容IE和FireFox,并通过Xhtml验证,整体感觉还不错,估计之后好一阵子都是用它了。

RayChou_White.jpg

下载:raychou_white.zip

RSS 天气预报 采集/发布系统

较早前做的一条天气预报信息采集系统,因为当时制作的一个网站需要用到自定义的天气预报,但在网上搜索了大半天,一直没有找到合适的,而国外的网站心里感觉对国内的预报是否准确心存怀疑,于是花了一下午的时间做了一个RSS天气预报站,共计2073个城市。

由于资料太多,采用生成生成静态文件的方法,但是如果纯提供静态文件,又不好做更新,如果定时更新数据库的话,对服务器的占用太大。所以最后采用的方法是对外提供php页面链接,当请求数据时,如果缓存里有数据并且是在1小时内(时间可自定义)生成的话,则直接输出缓存数据,否则载入新的数据并存入缓存。

系统演示:http://www.raychou.com/weather/

下载:weather.rar

让你的aLinks能对同一关键词替换多次

安装好了aLinks以后,迫不及待的发表了日志来测试关键词功能,发现一个Bug,在aLinks的全局设置中有一项相同关键词的替换次数限制,意思就是在一篇日志中一个关键词出现多次,对其进行替换的次数。但发现设置以后全无效果。今早起来后又想起这个问题,终于找到了一个折中的解决办法。因为懒得去分析作者的源码,只找到了进行关键词替换关键代码,对其修改同样可实现所要的效果

编辑文件 /wp-content/plugins/alinks/classes/aLinksController.php
翻到最下面找到类似

   $content = preg_replace($patterns, $replacements, $content, 1);

其中的 “1″ 即为对关键字替换的次数,改为 “-1″ 则替换所有

折腾了一个通宵,终于搞定这个WP插件 aLinks

用了两天的WP,感觉比之前好些了,虽然本身功能不强大,但是依靠完善插件机制,有众多的的插件支持,基本上能想到的功能都有了。

一口气给装上了数十个插件,都比较顺利,但一个关键字插件却让我费煞脑筋,花了不下4个小时才总算搞定,但回头想想,之前的设置都是没有问题的,莫名奇妙的就能用了。真是极度的郁闷。

下面附上修改aLinks默认语言的方法以及我翻译的简体中文的语言文件

1。编辑 /wp-content/plugins/alinks/classes/aLinksLang.php

   var $mofile = "zh-CN.mo";

下载语言包:zh-CN.zip

第 5 页,共 5 页12345