php - 如何从列表 MySQL 中删除特定数字

标签 php mysql

我在 MySQL 条目“id_user”中有一个逗号分隔的数字列表,如下所示:

127,130,150,12,4,7,8,9

在这个以逗号分隔的列表中查找数字的最佳方法是什么 (1) 如果它与其他数字一起使用逗号将其删除,或者 (2) 如果数字本身像这样,则直接删除它自己:

127

然后更新MySQL条目。

因此,如果我想从列表中删除 150,它将在 MySQL 中更新为:

127,130,12,4,7,8,9

我想避免尝试删除 ID“12”,但最终会删除 127 或 512 等数字中的“12”

谢谢!

最佳答案

字里行间,在我看来,您正在将外键列表存储在逗号分隔的字符串字段中以表示多对多关系。这不是一个好主意。

您应该做的是创建一个表来存储关系。

例如,假设您有一个名为users 的表并且您想要存储他们之间的 friend 关系。你正在做的是这样的(注意,我意识到这实际上不是一个很好的例子,因为我写了结尾,但我现在坚持使用它):

  id  |  name  |  friends
------+--------+-----------
  1   | Dave   |  2,4
  2   | Bob    |  1
  3   | Tom    |  4
  4   | Bill   |  1,3

然而最好的做法是这样的:

用户

  id  |  name  
------+--------
  1   | Dave   
  2   | Bob   
  3   | Tom    
  4   | Bill   

friend

  id  |  user  |  friend
------+--------+----------
  1   |   1    |    2
  2   |   1    |    4
  3   |   2    |    1
  4   |   3    |    4
  5   |   4    |    1
  6   |   4    |    3

要选择 Dave 的 friend ,您可以这样做

SELECT u.*
FROM friends f
JOIN users u ON u.id = f.friend
WHERE f.user = 1

...并删除 Dave 和 Bob 之间的关系(你想在这里做的),你可以简单地做

DELETE FROM friends
WHERE (
  user = 1 AND friend = 2
) OR (
  user = 2 AND friend = 1
)

关于php - 如何从列表 MySQL 中删除特定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10985189/

相关文章:

php - 如何避免我的 PHP 网站上出现垃圾投票

php - 使用 Laravel 5.5 使用带有默认数据的 PhpSpreadsheet 创建 Excel 文件

PHP AJAX Jquery - 文件下载问题

mysql - 当 Mysql 中的名称可能略有不同时管理名称(例如 "Matt"与 "Mathew")

php - 从下拉菜单插入到 MySql

mysql - 通过外键检索数据

php - 如何将多个表单验证请求链接在一起?

php - 基于两个不同因素在数据库中获取最新输入的算法

PHP/MySQL/MariaDB - TINYINT 上的单引号与无引号;两台具有不同行为的服务器

MYSQL - 真/假动态数据透视表