我有一个列名为“access”的表,其中包含数组值[2,3,4]。现在我想在数组的最后一部分推送一个值。如果我的值是“7”,那么推送后的数组应该是[2,3,4,7]这是访问栏。
我使用了此方法,但我知道它不会发生,因为它会删除所有现有值
$id = '7' UPDATE user SET access = '$id' WHERE name = '$user'
3mpgtkmj1#
将逗号分隔的值放入SQL列是对SQL的误用,这就是为什么您找不到任何干净的方法来执行此操作的原因。如果你一定要这样做,试试这个。
UPDATE user SET access = CASE WHEN access IS NULL OR access = '' THEN $id WHEN FIND_IN_SET($id,access) IS NOT NULL THEN access ELSE CONCAT_WS(',',access,$id) END WHERE whatever;
第一个WHEN处理access不包含任何内容的情况,第二个处理$id值已经在access中的情况,ELSE附加$id值。但是如果可以的话,用SQL的方式来做。试着创建一个单独的表user_access。给予它一个user和一个access列。然后向表中插入一行来添加一个$id,删除一行来删除。为什么?access $id值和用户之间有一个多::一关系,这是通过表来完成的。
access
$id
user_access
user
c6ubokkw2#
可以在MySQL UPDATE语句中使用array_push()函数。
$id = '7'; $sql = "UPDATE user SET access = array_push(access, '$id') WHERE name = '$user'";
2条答案
按热度按时间3mpgtkmj1#
将逗号分隔的值放入SQL列是对SQL的误用,这就是为什么您找不到任何干净的方法来执行此操作的原因。
如果你一定要这样做,试试这个。
第一个WHEN处理
access
不包含任何内容的情况,第二个处理$id
值已经在access
中的情况,ELSE附加$id
值。但是如果可以的话,用SQL的方式来做。试着创建一个单独的表
user_access
。给予它一个user
和一个access
列。然后向表中插入一行来添加一个$id
,删除一行来删除。为什么?access $id值和用户之间有一个多::一关系,这是通过表来完成的。c6ubokkw2#
可以在MySQL UPDATE语句中使用array_push()函数。