我继承了一个数据库,在努力使其更干净、更有用的过程中,我遇到了以下问题。
将文件列移动到单独的表后,我现在的任务是将这些文件分成不同的行。请看我下面的例子。
key | jobid | files |
--------------------------------------------
1 30012 file1.pdf;file2.pdf
2 30013 file3.pdf
3 30014 file4.pdf;file5.pdf;file6.pdf
我想要一个 SQL 语句,将表变成以下内容:
key | jobid | files |
--------------------------------------------
1 30012 file1.pdf
2 30013 file3.pdf
3 30014 file4.pdf
4 30012 file2.pdf
5 30014 file5.pdf
6 30014 file6.pdf
是否必须删除原始条目才能实现此目的并不重要,因此以下解决方案也是可以接受的:
key | jobid | files |
--------------------------------------------
4 30012 file1.pdf
5 30013 file3.pdf
6 30014 file4.pdf
7 30012 file2.pdf
8 30014 file5.pdf
9 30014 file6.pdf
基本上我只需要在 ; 上分割文件字符串。分隔符和使用分割字符串创建的新行。
您能提供的任何帮助将不胜感激。
在 PHP 中(假设 $db 是一个有效的数据库连接并且key
是自动增量):
$sql="select `key`, jobid, files from filestable where files like '%\\;%'";
$qry=mysql_query($sql,$db);
$sql=array();
while (true) {
$row=mysql_fetch_row($qry);
if (!$row) break;
$key=$row[0];
$jobid=$row[1];
$files=explode(';',$row[2]);
foreach ($files as $file) {
$file=mysql_real_escape_string($file,$db);
$sql[]="insert into filestable (jobid,files) values ($jobid,'$file')";
}
$sql[]="delete from filestables where `key`=$key";
}
现在 $sql 有一组要运行的 SQL 语句 - 要么在 while 循环结束时运行它们,要么将它们批处理,稍后写出来,无论什么都适合您的加载模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)