mysql 中 随机数据插入问题
迷茫
迷茫 2017-04-17 13:02:34
[MySQL讨论组]

我写错的如下:

UPDATE `members` 
SET `headimg` = (select `path` from `rand_picture` order by rand()) 

目的是从rand_picture表中随机取出path去更新 member表中的headimg
因为子查询返回的是一个多维的结果所以要加limit 1的限制,但是结果会让member表把所有的headimg变成一样的,请教一些正确写法/

简单的说如何把B表中的字段随机的插入到A表中

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
迷茫
UPDATE `members` 
SET `headimg` = 
(select `path` from `rand_picture`
limit FLOOR(1 + RAND() * (select count(1) from `rand_picture`)), 1)

http://sqlfiddle.com/#!2/b9703/1/0

怪我咯

不好意思,我尝试使用一条SQL也搞不定这个需求。所以我写了一个简单的存储过程来达到这个目的,希望对你有用。

create table a1(id int, img varchar(200));
insert into a1 values(1, ''),(2, ''),(3, ''),(4, ''),(5, ''),(6, ''),(7, ''),(8, '');

create table a2(path varchar(33));
insert into a2 values('aa'),('bb'),('cc'),('dd'),('ee');


drop procedure IF EXISTS pro_test;
delimiter //
create procedure pro_test()
begin   
    DECLARE done INT DEFAULT 0;
    DECLARE na varchar(50) DEFAULT NULL;

    DECLARE cur CURSOR FOR 
        select id from a1 order by id;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    open cur;
    REPEAT
        FETCH cur INTO na;
        if not done then
            update a1 set img = (select path from a2 order by rand() limit 1) where id = na;                
        end if;
    UNTIL done END REPEAT;
    CLOSE cur;  
end
//
delimiter ;

call pro_test();
迷茫

如果真随机,可能一条sql搞不定。
可以先看下数据,考虑下member表的id到rand_picture的id的一个映射规则,然后类似这样写:
UPDATE members
SET headimg = (select path from rand_picture where path_id = member_id)

把path_id = member_id这个地方改一下,自己制定一个规则,这样可以做到每条都更别更新,但是如果你的where条件里面没有member表的某个字段做条件,更新出来肯定都是一样的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号