两行代码搞定多级关联搜索.小试牛刀
时间:2006-12-28
来源:互联网
代码:
<?php/*
Name: Search.class.php
Author: Genghonghao
Revisions: 2006/12/16
功能 : 多条件关联查寻类
*/
class Search extends Mysql_Class
{
/**
* $dbname:数据库名
* $searchfiled:查询的字段名例如:SELECT username,userage,usersex FROM
* $termfiled查询的条件的字段,where后面的字段名。例如:如WHERE USERID<>25 AND usersex=1
* $termvalue查询条件对应的值和条件符号,例如:=@1@,<>@25@,like '%@com@%'等,最之是条件表达式右侧的东西和$termfiled数组一一对应,
* 且下标必需为数字,通常情况下符号右边可能是变量,所以变量的前后一定要加上'@'符号
*
*/
private $dbname;
private $searchfiled = array();
private $termfiled = array();
private $termvalue = array();
/**
* 设置所有属性的值,参数为两个属性和其值
*/
public function __construct($dbv,$sv,$fiv,$vv)
{
$this->SetPm($dbv,$sv,$fiv,$vv);
}
/**
* 设置所有属性的值
*
*/
public function SetPm($v1,$v2,$v3,$v4)
{
self::__set('dbname',$v1);
self::__set('searchfiled',$v2);
self::__set('termfiled',$v3);
self::__set('termvalue',$v4);
}
// * 设置属性的值的函数
public function __set($pmname,$value)
{
if(isset($value))
{
$this->$pmname = $value;
}
else
{
return null;
}
}
/**
* 参数$id是WHERE 后边跟的第一个字段名用来进行第一次判断
* 参数$value是字段$id的默认值
* 参数$emblem是条件判断的符号,例如>,<,<>等
* 参数$last是SQL语句最部分,可以为空
* */
public function GetSearch($id,$emblem="<>",$emblemvalue=0,$last="ORDER BY subtime DESC")
{
$termfiled = $this->termfiled;
$termvalue = $this->termvalue;
$filenum = count($this->termvalue);
if(count($this->termfiled) != count($this->termvalue))
{
return null;
}
else
{
$filed = "";
foreach($this->searchfiled as $value)
{
$filed .= $value.",";
}
$fnum = strlen($filed);
$filed = substr($filed,0,($fnum-1));
$sql = "SELECT ";
$sql .= $filed;
$sql .= " FROM ";
$sql .= $this->dbname;
$sql .= " WHERE {$id}{$emblem}{$emblemvalue} ";
for($i=0;$i<$filenum;$i++)
{
//$termvalue[$i] = str_replace(" ","",$termvalue[$i]);
if(!strstr($termvalue[$i],"@@") and !strstr($termvalue[$i],"\"\"") and !strstr($termvalue[$i],"%%"))
{
$termvalue[$i] = str_replace("@","",$termvalue[$i]);
$sql.= "AND {$termfiled[$i]}{$termvalue[$i]} ";
}
}
if(!empty($last))
{
$sql.=$last;
}
// * Execute为父类中的数据据库操作方法,返回的值是数组!
return parent::Execute($sql);
}
}
}
?>
实例:
<?php
include_once('include/common.inc.php');
include_once('include/Search.class.php'); // 调用这个文件
$table = "tax_codex"; //查寻的数据库表名
$filedd = array('Title','Text'); //要查寻的字段
$term = array('Click','City','Title'); // 要查寻的条件字段
$termv = array('>@0@','="@上海@"',' LIKE "%@中国@%"'); // 要查寻的条件
$objsql = new Mysql_Class();
$objsearch = new Search($table,$filedd,$term,$termv); // 实例化这个类
$print_arr = $objsearch->GetSearch('CodexId',"<>","0","ORDER BY SubTime DESC"); // 调用类中方法行到结果数组
print_r($print_arr); // 打印出数组中的值.
?>
如有不当之处,请指教.
多谢.
[ 本帖最后由 帅的不能再输啦 于 2006-12-27 17:31 编辑 ]
作者: 帅的不能再输啦 发布时间: 2006-12-27
作者: leehui1983 发布时间: 2006-12-27
作者: thankwsx 发布时间: 2006-12-28
则可以
SELECT list1.number,list2.name FROM `list1`,`list2` WHERE list1.id==list2.id
作者: muqiao 发布时间: 2006-12-28
作者: muqiao 发布时间: 2006-12-28
作者: thankwsx 发布时间: 2006-12-28
引用:
原帖由 muqiao 于 2006-12-28 11:26 发表表list1中含有字段number,id,表list2中含有字段name,id
则可以
SELECT list1.number,list2.name FROM `list1`,`list2` WHERE list1.id==list2.id
$filedd = array('list1.number','list2.name'); //要查寻的字段
$term = array(''); // 要查寻的条件字段
$termv = array(''); // 要查寻的条件
$objsql = new Mysql_Class();
$objsearch = new Search($table,$filedd,$term,$termv); // 实例化这个类
$print_arr = $objsearch->GetSearch('list1.id',"==","list2.id")// 调用类中方法行到结果数组
print_r($print_arr); // 打印出数组中的值.
?>
作者: 帅的不能再输啦 发布时间: 2006-12-28
这个如何?
作者: thankwsx 发布时间: 2006-12-28
作者: thankwsx 发布时间: 2006-12-28
下面是不是两行...
$objsearch = new Search($table,$filedd,$term,$termv); // 实例化这个类
$print_arr = $objsearch->GetSearch('list1.id',"==","list2.id")// 调用类中方法行到结果数组
作者: 帅的不能再输啦 发布时间: 2006-12-28
也可以改成一行好了,把所有\n都去掉。不就成一行了。。
没记错,你是bus的?
作者: thankwsx 发布时间: 2006-12-28


作者: fengyun 发布时间: 2006-12-29
作者: ZiNYon! 发布时间: 2006-12-30
作者: stanley.wy 发布时间: 2007-01-05
作者: Poon 发布时间: 2007-01-13
作者: k1ng 发布时间: 2007-01-31
作者: lmhllr 发布时间: 2007-01-31
作者: Internet 发布时间: 2007-02-04
作者: airwin 发布时间: 2007-02-05

等过些日子,把偶写的放出来。
$field = array(
"{$this->moduleTable}.id as id",
"{$this->moduleTable}.mid as mid",
"{$this->moduleTable}.pid as pid",
"{$this->moduleTable}.name as name"
);
$option = array('where'=>" type='system' AND disable='n' AND {$this->moduleTable}.id={$this->table}.mid ");
$option['where'] .= " AND {$this->table}.gid={$gid}";
$this->table = $this->table.','.$this->moduleTable;
return parent::find($field, $option);
[ 本帖最后由 angeljyt 于 2008-4-30 14:02 编辑 ]
作者: xiaocao001 发布时间: 2007-02-06
作者: angeljyt 发布时间: 2008-04-30
作者: dzjzmj 发布时间: 2008-04-30
郁闷 给就给个齐全 好马上测试的喽
作者: MagicYang 发布时间: 2008-06-23
作者: saku87 发布时间: 2008-07-15
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28