设为首页收藏本站

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 49|回复: 8

求大佬简化下这个mysql的update命令

[复制链接]

214

主题

1894

回帖

4508

积分

论坛元老

积分
4508
发表于 2019-12-10 15:09:28 | 显示全部楼层 |阅读模式
都写到excel了,读取下跑个for循环不就ok了

没必要非要跟sql较劲吧
回复

使用道具 举报

11

主题

229

回帖

515

积分

高级会员

积分
515
发表于 2019-12-10 15:11:04 | 显示全部楼层

bob1987 发表于 2019-12-10 15:12

大佬的for循环,我不懂哦,,,,还望大佬详细点

伪代码:

读取excel 获取listlist
list.for {
  update tb_xxx set yunfile = #{yunfile} where softwriter = #{softwriter}
}
回复

使用道具 举报

214

主题

1894

回帖

4508

积分

论坛元老

积分
4508
 楼主| 发表于 2019-12-10 15:11:58 | 显示全部楼层
写个for循环用softwriter和对应的yunfile生成sql语句,执行sql,完毕


回复

使用道具 举报

11

主题

229

回帖

515

积分

高级会员

积分
515
发表于 2019-12-10 15:12:42 | 显示全部楼层
要用php或者java读取excel,循环执行sql,只靠sql命令估计不行
bob1987 发表于 2019-12-10 15:17

好滴,谢谢大佬,我研究研究,再百度一下

就是7#8#的意思 ,一样的
回复

使用道具 举报

214

主题

1894

回帖

4508

积分

论坛元老

积分
4508
 楼主| 发表于 2019-12-10 15:15:46 | 显示全部楼层
softwriter和yunfile的对应关系先导入一张mapping表中 然后用
update A
set A.yunfile = B.yunfile
from phome_ecms_download_data_1 as A
left join mapping as B
on A.softwrite = B.softwrite
以上是SQL SERVER的写法 MYSQL语法应该差不太多 调试调试
回复

使用道具 举报

1

主题

30

回帖

83

积分

注册会员

积分
83
发表于 2019-12-10 15:12:00 | 显示全部楼层
直接把excel导入数据库,然后一句话update就好了,for都不用。。。。。
回复

使用道具 举报

214

主题

1894

回帖

4508

积分

论坛元老

积分
4508
 楼主| 发表于 2019-12-10 15:16:02 | 显示全部楼层
[ol]
  • Sub generateSQL()
  • Dim currentLine As LongLong
  • Dim yunfile_col, softwriter_col As Integer
  • Dim path As String
  • path = ThisWorkbook.path & "\sql.txt"    '设置生成txt路径,默认与该工作簿相同路径下的sql.txt
  • currentLine = 1                          '设置yunfile与softwriter数据的起始行,从1开始
  • yunfile_col = 1                          '设置yunfile的列,从1开始
  • softwriter_col = 2                       '设置softwriter的列,从1开始
  • Set fs = CreateObject("Scripting.FileSystemObject")
  • Set a = fs.CreateTextFile(path, True)
  •       
  • While Cells(currentLine, softwriter_col)  ""
  •     a.WriteLine "UPDATE phome_ecms_download_date_1 SET yunfile='" & Cells(currentLine, yunfile_col).Text & "' where softwriter='" & Cells(currentLine, softwriter_col) & "';"
  •     currentLine = currentLine + 1
  • Wend
  • a.Close
  • End Sub
  • [/ol]复制代码
    在excel生成sql语句就动动手指头的事了
  • 回复

    使用道具 举报

    0

    主题

    1

    回帖

    4

    积分

    新手上路

    积分
    4
    发表于 2019-12-10 15:16:08 | 显示全部楼层
    [ol]
  •         $mysqli = mysqli_connect('localhost', '数据库用户名', '数据库密码', '数据库名字');
  •         $sql = 'select * from `yunfile`';
  •         $res = mysqli_query($mysqli, $sql);
  •         $uniq_key_val = array();
  •         while ($row = mysqli_fetch_assoc($res)) {
  •                 $uniq_key_val[$row['yunfile']] = $row['id'];
  •         }
  •         $file = "CharList.txt"; //将excel文件导出成txt格式 后的文件名字
  •         $con = file($file);
  •         $sql = "INSERT INTO `yunfile` ( `yunfile`,`softwriter`) VALUES ";
  •         array_shift($con);//如果excel文件第一行 是 行名字 则保留这行,否则 在这行前面加 // 屏蔽这行,或者删除这行;
  •         array_pop($con);
  •         $sqlUpdate = "UPDATE `yunfile` a JOIN ( ";
  •         foreach ($con as $key => $value) {
  •                 $valueArr = explode("        ",$value);
  •                 $sql_chip[] = "SELECT '" . $uniq_key_val[$valueArr[0]] . "' AS `id`, '" . trim($valueArr[0]) . "' AS `yunfile` , " . """ .  trim($valueArr[1]) . "" AS `softwriter`";
  •         }
  •         $sqlUpdate .= implode(" UNION ", $sql_chip) . " ) b USING (`id`, `yunfile`) SET a.`softwriter` = b.`softwriter`;";
  •         mysqli_query($mysqli,$sqlUpdate);
  •         mysqli_close($mysqli);[/ol]复制代码

    1)  本程序是php版,在php环境下执行;
    2) 数据库表中如果没有自增ID字段,请添加此字段,int 类型,AUTO_INCREMENT;
    3) 把保存对应值的excel文件另存,导出成txt格式文件,该文件放的位置和本程序同目录;
    4) 把你服务器上数据库的连接用户名、密码、数据库名字填写在程序第一行的对应位置;
    5) 本程序假设存放表名字为yunfile,唯一标示码的字段是:yunfile,需要变更的值存放字段为:softwriter,如果有不同,则依照此规则把程序中对应的位置;
    5) 运行该程序,可以一次性更新文件中所有数值;

  • 回复

    使用道具 举报

    5

    主题

    207

    回帖

    475

    积分

    中级会员

    积分
    475
    发表于 2019-12-10 15:17:26 | 显示全部楼层
    权6,羡慕大佬~~
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|Discuz! X

    GMT+8, 2025-12-20 03:57 , Processed in 0.017003 second(s), 7 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表