mysql中mysql 一个字段多个值中有多个值

MySQL两个日期字段相减得到秒的方法--种豆网
MySQL两个日期字段相减得到秒的方法
阅读:17621次
一、MySQL中两个DateTime字段相减假定表名为tblName,两个DateTime字段名分别为beginDateTime,endDateTime,以下是相关两个mysql日期字段相减的SQL语句,这种方式两字段跨天,月,年都无问题。得到两个日期字段之间的秒数selec t (UNIX_TIMESTAMP(endDateTime) - UNIX_TIMESTAMP(beginDateTime)) dif_second from tblName得到两个日期字段之间的分数selec t (UNIX_TIMESTAMP(endDateTime) - UNIX_TIMESTAMP(beginDateTime))/60 dif_minute from tblName得到两个日期字段之间的天数selec t (UNIX_TIMESTAMP(endDateTime) - UNIX_TIMESTAMP(beginDateTime))/(60*60*24) dif_minute from tblName二、MySQL中两个Time字段相减如果两个字段都为Time类型,如果两个时间都在同一天,相减可以得到相差的秒数,但如果跨天,月,年都有问题。selec t (TIME_TO_SEC(endDateTime) - TIME_TO_SEC(beginDateTime)) dif_second from tblName
举报 | 纠错 | 建议 |
关于种豆 ┊ 联系我们 ┊ 免责声明 ┊ 发帖须知 ┊ 请提意见 ┊ 站点地图
种豆网资源由热心网友整理,版权归原作者,如有侵权,请Email通知我们。欢迎转载,转载请以超链接方式注明出处。
Copyright&2010-&mysql批量更新多条记录的同一字段为不同值 - 推酷
mysql批量更新多条记录的同一字段为不同值
mysql更新数据的某个字段,一般这样写:
UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';
也可以这样用in指定要更新的记录:
UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values');
这里注意 ‘other_values’ 是一个逗号(,)分隔的字符串,如:1,2,3
如果更新多条数据而且每条记录要更新的值不同,可能很多人会这样写:
foreach ($values as $id =& $myvalue) {
$sql = &UPDATE mytable SET myfield = $myvalue WHERE id = $id&;
mysql_query($sql);
即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很容易造成阻塞。
那么能不能一条sql语句实现批量更新呢?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。
UPDATE mytable
SET myfield = CASE id
WHEN 1 THEN 'myvalue1'
WHEN 2 THEN 'myvalue2'
WHEN 3 THEN 'myvalue3'
WHERE other_field ('other_values')
如果where条件查询出记录的id不在CASE范围内,myfield将被设置为空。
如果更新多个值的话,只需要稍加修改:
UPDATE mytable
SET myfield1 = CASE id
WHEN 1 THEN 'myvalue11'
WHEN 2 THEN 'myvalue12'
WHEN 3 THEN 'myvalue13'
myfield2 = CASE id
WHEN 1 THEN 'myvalue21'
WHEN 2 THEN 'myvalue22'
WHEN 3 THEN 'myvalue23'
WHERE id IN (1,2,3)
这里以php为例,构造这两条mysql语句:
更新多条单个字段为不同值, mysql模式
$ids_values = array(
$ids = implode(',', array_keys($ids_values ));
$sql = &UPDATE mytable SET myfield = CASE id &;
foreach ($ids_values as $id=& $myvalue) {
$sql .= sprintf(&WHEN %d THEN %d &, $id, $myvalue);
$sql .= &END WHERE id IN ($ids)&;
echo $sql.&;&br/&&;
UPDATE mytable SET myfield = CASE id WHEN 1 THEN 11 WHEN 2 THEN 22 WHEN 3 THEN 33 WHEN 4 THEN 44 WHEN 5 THEN 55 WHEN 6 THEN 66 WHEN 7 THEN 77 WHEN 8 THEN 88 END WHERE id IN (1,2,3,4,5,6,7,8);
更新多个字段为不同值, PDO模式
$data = array(array('id' =& 1, 'myfield1val' =& 11, 'myfield2val' =& 111), array('id' =& 2, 'myfield1val' =& 22, 'myfield2val' =& 222));
$where_in_ids = implode(',', array_map(function($v) {return &:id_& . $v['id'];}, $data));
$update_sql = 'UPDATE mytable SET';
$params = array();
$update_sql .= ' myfield1 = CASE id';
foreach($data as $key =& $item) {
$update_sql .= & WHEN :id_& . $key . & THEN :myfield1val_& . $key . & &;
$params[&:id_& . $key] = $item['id'];
$params[&:myfield1val_& . $key] = $item['myfield1val'];
$update_sql .= & END&;
$update_sql .= ',myfield2 = CASE id';
foreach($data as $key =& $item) {
$update_sql .= & WHEN :id_& . $key . & THEN :myfield2val_& . $key . & &;
$params[&:id_& . $key] = $item['id'];
$params[&:myfield1va2_& . $key] = $item['myfield2val'];
$update_sql .= & END&;
$update_sql .= & WHERE id IN (& . $where_in_ids . &)&;
echo $update_sql.&;&br/&&;
var_dump($params);
UPDATE mytable SET myfield1 = CASE id WHEN :id_0 THEN :myfield1val_0 WHEN :id_1 THEN :myfield1val_1 END,myfield2 = CASE id WHEN :id_0 THEN :myfield2val_0 WHEN :id_1 THEN :myfield2val_1 END WHERE id IN (:id_1,:id_2);
array (size=6)
':id_0' =& int 1
':myfield1val_0' =& int 11
':id_1' =& int 2
':myfield1val_1' =& int 22
':myfield1va2_0' =& int 111
':myfield1va2_1' =& int 222
另外三种批量更新方式
1. replace into 批量更新
replace into mytable(id, myfield) values (1,'value1'),(2,'value2'),(3,'value3');
2. insert into ...on duplicate key update批量更新
insert into mytable(id, myfield1, myfield2) values (1,'value11','value21'),(2,'value12','value22'),(3,'value13','value23') on duplicate key update myfield1=values(myfield2),values(myfield2)+values(id);
DROP TABLE IF EXISTS `tmptable`;
create temporary table tmptable(id int(4) primary key,myfield varchar(50));
insert into tmptable values (1,'value1'),(2,'value2'),(3,'value3');
update mytable, tmptable set mytable.myfield = tmptable.myfield where mytable.id = tmptable.
【replace into】和【insert into】更新都
依赖于主键或唯一值
,并都可能造成新增记录的操作的
【replace into】操作本质是对重复记录先delete然后insert,如果
更新的字段不全缺失的字段将被设置成缺省值
【insert into】则只是update重复的记录,更改的字段只能依循公式值
【临时表】方式需要用户有
temporary 表的create 权限
数量较少时【replace into】和【insert into】性能最好,数量大时【临时表】最好,【CASE】则具有通用型也不具结构隐患
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致ylInTheWay 的BLOG
用户名:ylInTheWay
文章数:12
访问量:9919
注册日期:
阅读量:5863
阅读量:12276
阅读量:354301
阅读量:1051756
51CTO推荐博文
&&&SELECT&TIME_TO_SEC('22:23:00')&&select&UNIX_TIMESTAMP();&&-&&&&&&&&select&UNIX_TIMESTAMP('&22:23:00');&&&&&select&FROM_UNIXTIME();&&
&&SUBSTRING(str,pos);&SELECT&SUBSTRING(SUBSTRING_INDEX('BGP-Beijing-59.151.105.130-AD_read-YeZongKun','-',3),&&(LENGTH(SUBSTRING_INDEX('BGP-Beijing-59.151.105.130-AD_read-YeZongKun','-',2))+2));&&SUBSTRING(str,pos,len);&SUBSTRING(str&FROM&pos&FOR&len);&SUBSTRING(str,pos);&SUBSTRING(str&FROM&pos);&&SELECT&SUBSTRING('Quadratically',5);&&SELECT&SUBSTRING('footbarbar'&FROM&4);&&SELECT&SUBSTRING('Quadratically',5,6);&&SELECT&SUBSTRING('Sakila',-3);&SELECT&SUBSTRING('Sakila',-1);&&SELECT&SUBSTRING('Sakila',-5,3);&&SELECT&SUBSTRING('Sakila'&FROM&-4&FOR&2);&
subString_index与subString,concat结合使用
&SUBSTRING_INDEX(str,delim,count);&&SELECT&SUBSTRING_INDEX('.cn','.',2);&&SELECT&SUBSTRING_INDEX('','.',-2);&&&&UPDATE&table&SET&name=REPLACE(name,&'abc',&'123');&&UPDATE&TABLE&SET&name=CONCAT(name,'-old');&&&&&&SELECT&ELT(2,,99);&&&&desc&user_info&&select&&date,min(case&when&type='a'&then&value&end),min(case&when&type='b'&then&value&end)&from&tb&group&by&date&
SELECT SUBSTRING(SUBSTRING_INDEX('BGP-Beijing-59.151.105.130-AD_read-YeZongKun','-',3),
(LENGTH(SUBSTRING_INDEX('BGP-Beijing-59.151.105.130-AD_read-YeZongKun','-',2))+2));
&select&INSTR('foobarbar',&'bar');&&&SELECT&LTRIM(str)&&SELECT&REVERSE(str)&&&select&INSERT('Quadratic',&3,&4,&'What');&&
使用:rankingListInfo(500,300,200,123,409,)&SELECT&INSERT((SELECT&rankingListInfo&FROM&user_info&WHERE&uid&=&1),17,7,(SELECT&SUBSTRING_INDEX(rankingListInfo,',',2)&FROM&user_info&WHERE&uid&=1))&&&SELECT&RIGHT((SELECT&INSERT((SELECT&rankingListInfo&FROM&user_info&WHERE&uid&=&1),17,7,(SELECT&SUBSTRING_INDEX(rankingListInfo,',',2)&FROM&user_info&WHERE&uid&=1))&&),13)&&-----PHP中分别读取---list($one,$two,$three,$four,$five) = explode('-',$rankingListInfo);这样就把字符串分割为5份,分别赋值给one,two,three...
-- 给变量赋值----进而进行其他赋值操作同一张表中即查询又update----------------------
DECLARE&@list&VARCHAR;&SET&@list&=&(SELECT&SUBSTRING_INDEX((SELECT&rankingListInfo&FROM&user_info&WHERE&uid&=&1),',',-4));&&SELECT&@&&UPDATE&user_info&set&rankingListInfo&=&@list&WHERE&uid&=1;&&SELECT&rankingListInfo&from&user_info&WHERE&uid=&1;&&UPDATE&user_info&SET&rankingListInfo&=&CONCAT(rankingListInfo,'500,500,')&WHERE&uid&=1;&
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:未分类┆阅读(0)┆评论(0)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&SQL取某个字段最大(小)数值及其相应行的其他字段值的句语-Mssql-数据库-壹聚教程网SQL取某个字段最大(小)数值及其相应行的其他字段值的句语
下面看一个关于SQL取某个字段最大小数值及其相应行的其他字段值的句语,希望文章对你提供一些帮助。
如下表Z 中,取 字段a 最大的那行
字段a&&&&&&&&&& 字段a&&& 字段c
最后得到下面结果
SQL语句如下: z.* from z, (select a,max(b) as max_b from z
a) z1 where z.a = z1.a and z.b = z1.max_b
下面给大家详细总结一些方法
SQL Server 按某一字段分组 取 最大 (小)值所在行的数据
-- 按某一字段分组 取 最大 (小)值所在行的数据
-- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 于浙江杭州)
数据如下:
name val memo
a&&& 2&& a2(a的第二个值)
a&&& 1&& a1--a的第一个值
a&&& 3&& a3:a的第三个值
b&&& 1&& b1--b的第一个值
b&&& 3&& b3:b的第三个值
b&&& 2&& b2b2b2b2
b&&& 4&& b4b4
b&&& 5&& b5b5b5b5b5
-- 创建表并插入数据:
create table tb(name varchar ( 10 ),val int ,memo varchar ( 20 ))
insert into tb values ( ' a ' ,&&& 2 ,&& ' a2(a的第二个值) ' )
insert into tb values ( ' a ' ,&&& 1 ,&& ' a1--a的第一个值 ' )
insert into tb values ( ' a ' ,&&& 3 ,&& ' a3:a的第三个值 ' )
insert into tb values ( ' b ' ,&&& 1 ,&& ' b1--b的第一个值 ' )
insert into tb values ( ' b ' ,&&& 3 ,&& ' b3:b的第三个值 ' )
insert into tb values ( ' b ' ,&&& 2 ,&& ' b2b2b2b2 ' )
insert into tb values ( ' b ' ,&&& 4 ,&& ' b4b4 ' )
insert into tb values ( ' b ' ,&&& 5 ,&& ' b5b5b5b5b5 ' )
-- 一、按name分组 取 val最大 的值所在行的数据。
-- 方法1:
select a. * from tb a where val = ( select max (val) from tb where name = a.name) order by a.name
-- 方法2:
select a. * from tb a where not exists ( select 1 from tb where name = a.name and val & a.val)
-- 方法3:
select a. * from tb a,( select name, max (val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
-- 方法4:
select a. * from tb a inner join ( select name , max (val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
select a. * from tb a where 1 & ( select count ( * ) from tb where name = a.name and val & a.val ) order by a.name
name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&&
---------- ----------- --------------------
a&&&&&&&&& 3&&&&&&&&&& a3:a的第三个值
b&&&&&&&&& 5&&&&&&&&&& b5b5b5b5b5
-- 二、按name分组 取 val最小的值所在行的数据。
-- 方法1:
select a. * from tb a where val = ( select min (val) from tb where name = a.name) order by a.name
-- 方法2:
select a. * from tb a where not exists ( select 1 from tb where name = a.name and val & a.val)
-- 方法3:
select a. * from tb a,( select name, min (val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
-- 方法4:
select a. * from tb a inner join ( select name , min (val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
select a. * from tb a where 1 & ( select count ( * ) from tb where name = a.name and val & a.val) order by a.name
name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&&
---------- ----------- --------------------
a&&&&&&&&& 1&&&&&&&&&& a1--a的第一个值
b&&&&&&&&& 1&&&&&&&&&& b1--b的第一个值
-- 三、按name分组 取 第一次出现的行所在的数据。
select a. * from tb a where val = ( select top 1 val from tb where name = a.name) order by a.name
name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&&
---------- ----------- --------------------
a&&&&&&&&& 2&&&&&&&&&& a2(a的第二个值)
b&&&&&&&&& 1&&&&&&&&&& b1--b的第一个值
-- 四、按name分组 随机取 一条数据。
select a. * from tb a where val = ( select top 1 val from tb where name = a.name order by newid ()) order by a.name
name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&&
---------- ----------- --------------------
a&&&&&&&&& 1&&&&&&&&&& a1--a的第一个值
b&&&&&&&&& 5&&&&&&&&&& b5b5b5b5b5
-- 五、按name分组 取 最小的两个(N个)val
select a. * from tb a where 2 & ( select count ( * ) from tb where name = a.name and val & a.val ) order by a.name,a.val
select a. * from tb a where val in ( select top 2 val from tb where name = a.name order by val) order by a.name,a.val
select a. * from tb a where exists ( select count ( * ) from tb where name = a.name and val & a.val having Count ( * ) & 2 ) order by a.name
name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&&
---------- ----------- --------------------
a&&&&&&&&& 1&&&&&&&&&& a1--a的第一个值
a&&&&&&&&& 2&&&&&&&&&& a2(a的第二个值)
b&&&&&&&&& 1&&&&&&&&&& b1--b的第一个值
b&&&&&&&&& 2&&&&&&&&&& b2b2b2b2
上一页: &&&&&下一页:相关内容}

我要回帖

更多关于 mysql 两个字段最大值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信