一条SQL条件选择数据库记录(再现非Oracle数据库的脑残的连接操作符号)

来源:互联网 发布:中国如何注册io域名 编辑:程序博客网 时间:2024/05/01 09:01

传入参数,图像文件的url数组$files,在数据库中查询该图像的预览图像preview_url,有记录则返回URL|PREVIEW_URL的形式,没有记录则利用该图像文件的URL进行填充URL|URL进行返回。mysql数据库需要使用concat函数进行连接,类似于oracle的||连接操作符。注意这里不能使用mysql的ifnull函数进行选择,因为不是字段为空,而是没有记录返回。拆分数组,在sql中以union求各条单独的sql的并集但不重复的记录。最后返回给百度编辑器ueditor的图像管理页。

function getImgMergedURL(&$files,$shopid)//$files为数组,$shopid为店铺名{    if(DB_CLASS=="mysql")    {        $dbcls=new mysqldb();        $single="";$sql="";        for($i=0;$i<count($files);$i++)        {//在数据库中没有的图片,将组合自己的URL显示$single=sprintf("select if(odata.url_count=0,'%s|%s',concat(URL,'|',PREVIEW_URL)) as MERGED_URL from (select count(URL) as url_count,URL,PREVIEW_URL from %sshop_picture where url='%s' and shop_id='%s') odata",$files[$i],$files[$i],TABLEPRE,$files[$i],$shopid);            if($i>0)                $sql.=" union ".$single;                            else//不做union                $sql.=$single;        }        $sql.=";";        $res=$dbcls->sql_exec($sql);        $nums=mysql_num_rows($res);        $mfiles=array();        for($i=0;$i<$nums;$i++)        {            $row=mysql_fetch_array($res);            $mfiles[$i]=$row["MERGED_URL"];        }        if($nums!=0)            return $mfiles;        else            return null;    }}

在实际运行过程中才发现,这个sql的写法,只适用于较少文件的处理。当文件数较多时,mysql会出现嵌套过多的错误。改进后的sql如下,变成处理一个右连接问题即可。说实话,个人感觉,只有Oracle的连接操作符是最人性化的,一个a.field=b.field(+)类型的符号搞定右连接,一个a.field(+)=b.field搞定左连接,一个a.field(+)=b.field(+)搞定全连接。其余数据库的连接操作符都是脑残的工程师设计的。(非Oracle DBA勿喷)

function getImgMergedURL(&$files,$shopid)//$files为数组,$shopid为店铺名{//在数据库中没有的图片,将组合自己的URL显示    if(DB_CLASS=="mysql")    {        $dbcls=new mysqldb();        $single="";$sql="";        for($i=0;$i<count($files);$i++)        {//先将数组中的文件简单用union并集起来,变成一个集合的数据源            $single=sprintf("select '%s' as OURL",$files[$i]);            if($i>0)                $sql.=" union ".$single;                            else//不做union                $sql.=$single;        }        $osql=$sql;//然后在这里和实际的数据库表做右连接        $sql=sprintf("select concat(odata.ourl,'|',ifnull(sp.preview_url,odata.ourl)) as MERGED_URL from %sshop_picture sp right join (%s) odata on sp.url=odata.ourl", TABLEPRE,$osql);        $res=$dbcls->sql_exec($sql);        $nums=mysql_num_rows($res);        $mfiles=array();        for($i=0;$i<$nums;$i++)        {            $row=mysql_fetch_array($res);            $mfiles[$i]=$row["MERGED_URL"];        }        if($nums!=0)        {            return $mfiles;        }        else            return null;    }}

目前是40个图像文件,既可以选择出数据库中有缩略图记录的图像,也可以选择出数据库中没有缩略图记录的图像。且不重复。这样,百度ueditor编辑器的图像管理页面的缩略图预览、原图像传输到编辑框的功能的数据库处理部分,算是完成了。减少了原图像预览时不必要的文件传输。要将它按照你的规则传输到编辑框中,你还需要修改该编辑器的image.js和imageManager.php文件,具体请参考百度ueditor的API帮助文档。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 西安住房公积金管理中心 住房公积金贷款额度 沧州住房公积金查询 个人住房公积金查询入口 银行住房贷款利率计算器 合肥市住房公积金管理中心 山东省住房和城乡建设厅 2019商业住房贷款利率 住房和城乡建设部 长春住房公积金 四川省住房城乡建设厅首页 新乡市住房公积金管理中心 住房贷款利率计算器 邵阳市住房公积金管理中心 邵阳住房公积金 商业住房贷款利率 陕西省住房公积金管理中心 合肥住房公积金管理中心 长春市住房公积金 山东省住房城乡建设厅 2019各银行住房商贷利率一览表 住房公积金查询入口 陕西省住房和城乡建设厅网 沧州住房公积金个人查询入口 包头市住房公积金管理中心 佛山住房公积金中心 个人住房商业性贷款 住房公积金装修贷款能贷多少 邵阳住房公积金管理中心 工资4000住房公积金一般交多少 西安住房保障管理局网站 佛山住房公积金 住房城乡建设部 河南省住房和城乡建设厅网 北京住房公积金 广州住房公积金管理中心 西安住房公积金 成都住房公积金管理中心 宜春住房公积金 安徽省住房和城乡建设厅 四川城乡住房建设厅