0

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

例如,我这样做:

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

数据库只注册'10'。

有什么办法吗?

4

3 回答 3

3

发生这种情况是因为您正在更新一个数字,可能是一个整数,所以 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,每个用户子类别都有一个条目,但这会使事情复杂化。

我希望它可以帮助你

于 2013-10-01T13:54:07.233 回答
0

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

什么可以解决你的问题?

  1. 机会数据库结构并取决于关系。
  2. (坏主意)例如将类型更改为 varchar 然后插入将完成(不要这样做)
  3. 进行多次更新(这实际上取决于数据库结构)
于 2013-10-01T13:27:58.997 回答
0

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

如果您只是尝试存储少量数字,则使用 php 连接和拆分函数获取数字列表并转换为字符串并将其存储在 VARCHAR 中。

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

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

于 2013-10-01T13:32:56.890 回答