2015-08-03 2 views
0

У меня есть база данных MySQL, где мне нужно добавить несколько значений, но мне нужно указать диапазон значений только в одном столбце.Как вставить несколько значений из диапазона в столбцы MySQL?

Я не эксперт, но логика для того, что мне нужно это:

INSERT INTO ps_category_product (id_category, id_product, position) VALUES (56,BETWEEN 3 AND 5,0); 

Я знаю, что это не представляется возможным использовать BETWEEN в вставки в запросе, но как я могу сделать что-то подобное указать диапазон строки id_product?

Как я могу добавить все значения между 2 номерами, как 3 и 5 (3,4,5) или 50 и 100 (50,51,52, ..., 98,99,100)

+0

Вы хотите вставить значение 'id_product', что составляет от 3 до 5 лет? – julekgwa

+0

Я хочу вставить весь диапазон значений между двумя числами. например: между 3 и 5 (3,4,5) или 50 и 100 (50,51,52, ..., 98,99,100) –

+0

Функция 'mt_rand' будет генерировать числа между диапазоном. например, 'mt_rand (3,5)' даст вам '3,4,5' – julekgwa

ответ

0

Вы можете создайте новую таблицу под названием range с двумя атрибутами, представляющими «диапазон» ... тогда вы создаете взаимосвязь (один к одному) между «ps_category_product» и «new_table» ... таким образом, в вашей таблице ps_category_product вы будете иметь иностранную ключ, который ссылается на два значения ...

+0

@Fernando Olvera, попробовали ли вы это решение? –

0

Нет, вы не можете использовать диапазон значений при вставке. Скорее всего, вы должны будете подтвердить ваши ценности вставки, используя BEFORE INSERT TRIGGER что-то, как показано ниже (образец)

CREATE TRIGGER validaterangeTrigger 
BEFORE INSERT 
ON ps_category_product 
    FOR EACH ROW BEGIN 
    IF (NEW.id_product NOT BETWEEN 3 AND 5) THEN 
     SET NEW.id_product = 3; <-- setting a default value 3 
    END IF 

Тогда вы можете назвать ваше INSERT заявление

INSERT INTO ps_category_product (id_category, id_product, position) VALUES (56,4,0); 

Если значение id_product не между 3 и 5, то триггер установит его на значение по умолчанию 3. Вы также можете выбрать ошибку, если проверка не выполняется.

+0

Я попытался это сделать, но я понял, что вместо всего диапазона добавлено только одно значение, как я могу добавить все значения между двумя цифрами, такими как 3 и 5 (3,4,5) или 50 и 100 (50,51 , 52, ..., 98,99,100) –

+0

@FernandoOlvera, НЕТ, вы не можете этого сделать, и, кроме того, вы не должны этого делать. Сохранение ',' разделенных значений противоречит концепции нормализации. Вы столкнетесь с проблемой позже, когда попытаетесь присоединиться к другой таблице. – Rahul

+0

Разделенные значения были справедливыми и, например, я имел в виду (3,4,5) весь диапазон чисел, я не буду писать SQL-запрос как таковой, поэтому следует понимать как диапазон чисел, а не как синтаксис. То же самое с 50 и 100, что я хочу сделать, это добавить новую строку, где только id_product изменяет значение с помощью 50 или 51 или 52 и т. Д., Но другие значения, такие как id_category и position, остаются неизменными. –

0

Вы также можете попробовать использовать mt_rand

$id_product = mt_rand(3,5); 
INSERT INTO ps_category_product (id_category, id_product, position) VALUES (56,$id_product,0); 
Смежные вопросы