【问题标题】:Insert numbers into a single field MySQL将数字插入单个字段 MySQL
【发布时间】:2013-10-01 13:23:13
【问题描述】:

我正在尝试将不同的数字(如“10 11 12”)插入 MySQL 字段(数字来自 PHP),但是当我进行查询时,该字段只获取第一个数字。

例如,我这样做:

UPDATE profile SET subcategory = '10 11 12' WHERE userId = 1 LIMIT 1

而数据库只注册 '10'。

有什么办法吗?

【问题讨论】:

  • 这听起来像是一个 XY 问题。请告诉我们关于 X.meta.stackexchange.com/questions/66377/what-is-the-xy-problem
  • 了解联接。你需要另一张桌子。
  • 该字段有多大?看起来可能会被截断?
  • 如果 subcategory 是 int 类型,则将其转换为 int,因此第一个正确的 int 为 10 将被放入表中
  • 我不知道还有什么更可悲的,人们建议更改字段长度或字段类型。很明显这是糟糕的数据库设计。如果您将多个子类别分配给单个配置文件,则插入更多行,每行是 subcategory_id 链接到相同的 profile_id/user_id 或其他。这些是基础。至于走坏路——那是个人选择。而那些建议增加字段长度/类型的人只是证明,当所有新手都能获得它时,这个网站上的声誉毫无意义。

标签: php mysql integer


【解决方案1】:

这是因为你要更新一个数字,可能是一个整数,所以 mysql 只为第一个数字做这项工作。

如果你这样做:

UPDATE profile SET subcategory = 10 WHERE userId = 1 LIMIT 1
UPDATE profile SET subcategory = 11 WHERE userId = 1 LIMIT 1
UPDATE profile SET subcategory = 12 WHERE userId = 1 LIMIT 1

您只需使用第三个值 (12) 更新类别。

我建议您使用属于多个子类别的用户,因此您必须创建另一个表。例如:一个名为 subcategories 的表,至少有两个字段:userId 和 subcategoryId。然后你可以这样做:

DELETE FROM subcategories WHERE userId=1
INSERT INTO subcategories (userId, subcategory) VALUES (1,10)
INSERT INTO subcategories (userId, subcategory) VALUES (1,11)
INSERT INTO subcategories (userId, subcategory) VALUES (1,12)

第一行 (delete) 仅用于更新用户的子类别,首先删除用户的所有旧子类别,然后插入新的子类别。在 PHP 中,您可以使用 foreach() 自动插入多个值。

您也可以在表配置文件中有一个非唯一的 userId,每个用户子类别都有一个条目,但这会使事情复杂化。

希望对你有帮助

【讨论】:

    【解决方案2】:

    根据您的问题,我猜您的子类别的类型是整数。放置字符串时会发生什么?它被转换。转换器将其转换为第一个正确的整数,即 10 之后的 10 个空格被视为字符串。

    什么可以解决您的问题?

    1. 机会数据库结构和依赖关系。
    2. (坏主意)例如将类型更改为 varchar,然后插入将完成(不要这样做)
    3. 进行多次更新(实际上取决于数据库结构)

    【讨论】:

      【解决方案3】:

      这在很大程度上取决于您要解决的问题。

      如果您只是想存储少量数字,则使用 php join 和 split 函数获取数字列表并转换为字符串并将其存储在 VARCHAR 中。

      解决问题的更好方法是了解数据的布局。尝试使用一个将个人资料链接到子类别的表格。两列,一列用于配置文件 ID,另一列用于子类别 ID。您可能会发现搜索数据库规范化信息。

      此演示文稿看起来内容相对丰富:http://www.sqa.org.uk/e-learning/MDBS01CD/page_26.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-20
        • 2016-07-05
        • 2017-04-21
        • 2022-01-18
        • 2014-08-15
        • 1970-01-01
        • 2019-08-21
        相关资源
        最近更新 更多