一条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帮助文档。
- 一条SQL条件选择数据库记录(再现非Oracle数据库的脑残的连接操作符号)
- 随机查询一条数据库记录的SQL
- ORACLE随机获取数据库表的一条记录
- 从数据库中随机抽取一条记录的SQL语句
- 数据库中随机查询一条记录的SQL语句
- 数据库中随机查询一条记录的SQL
- 从数据库中随机抽取一条记录的SQL语句
- PL/SQL Developer连接Oracle数据库的操作步骤
- oracle数据库中求某行的上一条记录和下一条记录
- Oracle数据库的SQL查询语句查询每个用户最近一次的登录记录并且只显示一条
- 删除数据库中重复的记录(保留一条)-oracle、mysql版
- Oracle数据库的常见操作记录
- 在access数据库中,据记录ID得到其上一条记录及下一条记录的SQL
- C#学习中记录(二)--------数据库的连接操作
- Oracle中导出一条记录的SQL
- <实战>oracle 数据库的sql语句中 ‘&’ 符号的处理
- 删除一条数据库记录的解决方案
- 查询mysql数据库的最后一条记录
- 转:ubuntu 下code blocks 安装全过程 && codeblocks 快捷键 && 解决调试终端不能粘贴问题
- 使IP最后一个点后面变成*
- Hook :VC++消息钩子编程
- winpcap 天生缺陷
- ESP定理如何判断找出OEP 【OEP脱壳的5种方法】
- 一条SQL条件选择数据库记录(再现非Oracle数据库的脑残的连接操作符号)
- 语音识别 一个超简单的语音听写识别编程
- 用EXP/IMP从高版本数据导出数据导入至低版本数据库实验
- vbox Ubuntu与windows主机实现文件共享
- volatile总结
- 语音识别 微软语音技术SAPI语音编程初步
- 林仕鼎谈架构设计与架构师
- 无监督学习特征--稀疏编码、深度学习、ICA部分代表文献
- OpenCV 初體驗