2013-10-01 5 views
0

Я пытаюсь вставить разные числа (например, «10 11 12») в поле MySQL (числа поступают из PHP), но когда я выполняю запрос, поле получает только первый номер.Вставить числа в одно поле MySQL

Например, я:

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

И DB просто регистрирует '10'.

Любой способ сделать это?

+1

Это звучит как проблема XY. Расскажите, пожалуйста, о X.http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – Halcyon

+1

Узнайте о присоединениях. Вам нужен другой стол. –

+0

Насколько велика область? Похоже, может быть усечение? – asantaballa

ответ

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() для автоматизации вставки нескольких значений.

У вас также может быть уникальный пользовательский идентификатор в профилях таблицы с записью для каждой подкатегории пользователя, но это усложнит ситуацию.

Надеюсь, это могло бы вам помочь

+0

Самое простое решение, но оно отлично работает! Благодаря! – Paolo

0

Из вашей проблемы я предполагаю, что тип вашей подкатегории является целым числом. Что происходит, когда вы ставите строку? Он преобразуется. Преобразователь преобразует его в первое правильное целое число, которое составляет 10 пробелов после 10, считается строкой.

Что может решить вашу проблему?

  1. Chance db structure и зависит от отношений.
  2. (плохая идея) изменить тип на VARCHAR, например, а затем вставить будет сделано (DONT DO IT)
  3. ли несколько обновлений (это зависит от структуры БД)
0

Это очень сильно зависит от проблема, которую вы пытаетесь решить.

Если вы просто пытаетесь сохранить небольшое количество чисел, используя функции php join и split, чтобы взять список чисел и преобразовать в строку и из нее и сохранить ее в VARCHAR.

Лучшим способом решения проблемы было бы понять расположение ваших данных. Попробуйте иметь таблицу, которая связывает профили с подкатегориями. Два столбца, один для идентификатора профиля и один для идентификатора подкатегории. Возможно, вы обнаружили, что поиск информации о нормализации базы данных информативен.

Эта презентация выглядит относительно информативен: http://www.sqa.org.uk/e-learning/MDBS01CD/page_26.htm

Смежные вопросы