Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 更新一个表';s列,基于另一个表';s列,其中有匹配的ID_Mysql_Sql_Database_Join - Fatal编程技术网

Mysql 更新一个表';s列,基于另一个表';s列,其中有匹配的ID

Mysql 更新一个表';s列,基于另一个表';s列,其中有匹配的ID,mysql,sql,database,join,Mysql,Sql,Database,Join,好的,我现在有两个表,它们有相应的ID(这是我们如何知道哪个列表属于哪个用户,它们有相同的ID)。基本上,我想根据另一个表(pmd_列表)的网站URL(列“www”)更新一个表(pmd_用户)的所有用户名(列“login”),并根据ID进行匹配。除此之外,删除了http:// 因此,表pmd_users具有字段“id”,而pmd_listings具有“user_id”。我们只需要更新表“pmd_users”中的“login”列。我曾想过像下面这样做,但我不确定这是否正确,我也不知道如何从网站(w

好的,我现在有两个表,它们有相应的ID(这是我们如何知道哪个列表属于哪个用户,它们有相同的ID)。基本上,我想根据另一个表(pmd_列表)的网站URL(列“www”)更新一个表(pmd_用户)的所有用户名(列“login”),并根据ID进行匹配。除此之外,删除了http://

因此,表pmd_users具有字段“id”,而pmd_listings具有“user_id”。我们只需要更新表“pmd_users”中的“login”列。我曾想过像下面这样做,但我不确定这是否正确,我也不知道如何从网站(www)栏中删除“http://”和“https://”

有什么建议吗


TL;DR我希望表pmd_用户列“login”与表pmd_列表列“www”匹配,其ID列匹配,但没有http://。

我认为您可以使用
substr()
case
来实现这一点

UPDATE pmd_users INNER JOIN pmd_listings
    ON pmd_listings.user_id=pmd_users.id
SET pmd_users.login = CASE
    WHEN substr(pmd_listings.www, 1,7) = 'http://'
        THEN substr(pmd_listings.www, 8)
    WHEN substr(pmd_listings.www, 1,8) = 'https://'
        THEN substr(pmd_listings.www, 9)
    ELSE pmd_users.login
END;

当然,这不是一个完整的问题,除非有人能帮助我,否则我可以使用以下两个查询来实现我想要的结果:

UPDATE pmd_users
       INNER JOIN pmd_listings 
          ON pmd_listings.user_id = pmd_users.id AND pmd_listings.www != ""
SET    pmd_users.login = pmd_listings.www
*添加了添加项以删除空列,完成后使用:

UPDATE pmd_users
SET login = REPLACE(login, 'http://www', '')
WHERE login LIKE 'http://www.%'
从登录中删除额外的


够了!谢谢大家。

您可能想看看
REPLACE()
函数。可能是重复的哦,我没有想到。但是,我必须复制数据,然后运行单独的查询来删除不需要的位,而不是同时执行?因为我不想从origianl列中删除http,只想在新表中的副本上删除。但是这可以工作。不,您可以只
设置pmd.user.login=REPLACE(…)
。源列将不受影响。愿意尝试一下(使用备份),但发现此错误“MySQL说:文档#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第9行“CASE”附近使用的正确语法”当我使用
END
而不是
END CASE
时,语法起作用。编辑我的答案。谢谢!如果您有时间,可以解释一下“1,7”“8”“1,8”“9”是什么意思吗?我不太确定。只要你有时间和关心,否则非常感谢!字符串后面的2个值表示字符串的起始索引号和结束索引号。如果要将所有内容返回到第一个索引的右侧,则结束索引号是可选的。
UPDATE pmd_users internal JOIN pmd_listings ON pmd_listings.user_id=pmd_users.id和pmd_listings.www''SET pmd_users.login=REPLACE(pmd_listings.www,'http://',''
UPDATE pmd_users
SET login = REPLACE(login, 'http://www', '')
WHERE login LIKE 'http://www.%'