我正在尝试将不同的数字(例如“10 11 12”)插入到MySQL字段中(数字来自PHP),但是当我执行查询时,该字段只获取第一个数字。
例如,我这样做:
UPDATE profile SET subcategory = '10 11 12' WHERE userId = 1 LIMIT 1
DB刚刚注册'10'。
有什么办法吗?
答案 0 :(得分: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)更新类别。
我建议您使用属于多个子类别的用户,这样您就必须创建另一个表。例如:一个名为子类别的表,至少包含两个字段: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)
第一行(删除)仅用于更新用户的子类别,首先删除用户的所有旧子类别,然后插入新的子类别。在PHP中,您可以使用foreach()自动插入多个值。
您还可以在表格配置文件中使用非唯一的userId,每个用户子类别都有一个条目,但这会使事情变得复杂。
我希望它可以帮到你
答案 1 :(得分:0)
从你的问题我猜你的子类别的类型是整数。放字符串会发生什么?它被转换。转换器将其转换为第一个适当的整数,10后的10个空格被视为字符串。
什么可以解决您的问题?
答案 2 :(得分:0)
这在很大程度上取决于您要解决的问题。
如果您只是想存储少量数字,那么使用php join和split函数来获取数字列表并转换为字符串并将其存储在VARCHAR中。
解决问题的更好方法是了解数据的布局。尝试使用将配置文件链接到子类别的表。两列,一列用于配置文件ID,另一列用于子类别ID。您可能会发现搜索数据库规范化信息。
此演示文稿看起来相对丰富:http://www.sqa.org.uk/e-learning/MDBS01CD/page_26.htm