SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.11.2012 16:32:14

Petr
Завсегдатай
Откуда: Москва
Зарегистрирован: 19.10.2011
Сообщений: 51

Проставить значение в таблице если..

Есть 2 таблицы 

`oc_product_attribute` (
  `product_id` int(11) NOT NULL,
  `attribute_id` int(11) NOT NULL,
  `language_id` int(11) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY (`product_id`,`attribute_id`,`language_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=22;


и

oc_product_description` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `language_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,


Возможно ли выполнить условия следующее: Если в таблице oc_product_description в столбце name есть определенны словосочетания типа Toyota, то в таблицу oc_product_attribute из oc_product_description нужно скопировать соответствующие поля product_id, language_id, а для полей attribute_id и text значения ввести самостоятельно. Я конечно догадываюсь, что так го запроса скорее всего нет, но может быть кто не будь сделает скрипт экспромтом ? smile Я знаю что есть типа таких запросов UPDATE tablename SET manufacturer_id = 1 WHERE image LIKE '%Camry%';


Работаю над Сайтом http://tuningdom.ru/, Ищу гуру которого можно спросить обо Всем!

Неактивен

 

#2 10.11.2012 19:29:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проставить значение в таблице если..

Если я правильно вас понял, то

insert into oc_product_attribute (product_id, language_id) select product_id, language_id from oc_product_description where name like '%Toyota%';
скопирует значения (product_id, language_id) из oc_product_description в oc_product_attribute.
Что значит "для полей attribute_id и text значения ввести самостоятельно"?

Неактивен

 

#3 11.11.2012 17:21:52

Petr
Завсегдатай
Откуда: Москва
Зарегистрирован: 19.10.2011
Сообщений: 51

Re: Проставить значение в таблице если..

vasya написал:

Если я правильно вас понял, то

insert into oc_product_attribute (product_id, language_id) select product_id, language_id from oc_product_description where name like '%Toyota%';
скопирует значения (product_id, language_id) из oc_product_description в oc_product_attribute.
Что значит "для полей attribute_id и text значения ввести самостоятельно"?

т.е полям присвоить значение самостоятельно например для attribute_id написать значение 46 а для text Цвет:

Отредактированно Petr (11.11.2012 17:22:29)


Работаю над Сайтом http://tuningdom.ru/, Ищу гуру которого можно спросить обо Всем!

Неактивен

 

#4 11.11.2012 18:20:30

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проставить значение в таблице если..

Если `attribute_id` и `text` одинаковые для всех строк, то это можно прописать сразу в запросе.
В противном случае не ясно что вам нужно.

Неактивен

 

#5 11.11.2012 19:06:34

Petr
Завсегдатай
Откуда: Москва
Зарегистрирован: 19.10.2011
Сообщений: 51

Re: Проставить значение в таблице если..

vasya написал:

Если `attribute_id` и `text` одинаковые для всех строк, то это можно прописать сразу в запросе.
В противном случае не ясно что вам нужно.

Примерно так? Это одинаковые для всех строк если искомое слово найдено.

INSERT INTO oc_product_attribute
SELECT product_id, '36' AS attribute_id, language_id, 'Текст из головы' AS text
FROM oc_product_description WHERE name LIKE '%Toyota%'


Работаю над Сайтом http://tuningdom.ru/, Ищу гуру которого можно спросить обо Всем!

Неактивен

 

#6 11.11.2012 21:02:19

Petr
Завсегдатай
Откуда: Москва
Зарегистрирован: 19.10.2011
Сообщений: 51

Re: Проставить значение в таблице если..

И еще вопросик можно ли в запросе как не будь реализовать такую логику

Логика: Если "Toyota" то Model_id = 1
Если "Prius" то make_id = 36
Если  2001,2002,2003,2004 так до 2013 то begin_year равен тому что нашлось т.е. одному из годов перечисленных вначале
Если "-2001,-2002,-2003" то end_year равен тому что нашлось т.е. одному из годов перечисленных вначале

Что то типа такого накалякал

INSERT INTO oc_product_to_ymm
SELECT '1' AS Model_id WHERE name LIKE '%Toyota%', 'Prius' AS make_id WHERE name LIKE '%Prius%', '200*' AS begin_year WHERE name LIKE '%200*%'
FROM oc_product_description
 


Работаю над Сайтом http://tuningdom.ru/, Ищу гуру которого можно спросить обо Всем!

Неактивен

 

#7 11.11.2012 21:31:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проставить значение в таблице если..

Petr написал:

И еще вопросик можно ли в запросе как не будь реализовать такую логику

Нет, нельзя.

Неактивен

 

#8 11.11.2012 21:48:20

Petr
Завсегдатай
Откуда: Москва
Зарегистрирован: 19.10.2011
Сообщений: 51

Re: Проставить значение в таблице если..

vasya написал:

Petr написал:

И еще вопросик можно ли в запросе как не будь реализовать такую логику

Нет, нельзя.

Может быть хотя бы частично? без годов? или вообще нельзя сделать , в одном запросе было сразу несколько искомых слов которые вставляются в разные таблицы?


Работаю над Сайтом http://tuningdom.ru/, Ищу гуру которого можно спросить обо Всем!

Неактивен

 

#9 11.11.2012 22:18:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проставить значение в таблице если..

В разные совсем никак, в одну можно написать сложную конструкцию из if().
Например:
insert into table1 (Model_id, make_id) select if(name LIKE '%Toyota%',1,'значение по умолчанию'), if(name LIKE '%Prius%',36,'значение по умолчанию') from table2.

Но проще не изобретать велосипед, а написать несколько простых запросов.

Неактивен

 

#10 11.11.2012 22:52:55

Petr
Завсегдатай
Откуда: Москва
Зарегистрирован: 19.10.2011
Сообщений: 51

Re: Проставить значение в таблице если..

vasya написал:

Но проще не изобретать велосипед, а написать несколько простых запросов.

Да если я например напишу 4 запроса вида

INSERT INTO oc_product_to_ymm
SELECT , 'ID' AS attribute_id,
FROM oc_product_description WHERE name LIKE '%Toyota%'


То у меня в таблице будет 4 строчки с разными записями в столбцах, мне то нужно что бы запрос целиком заполнял всю строчку которю создает


Работаю над Сайтом http://tuningdom.ru/, Ищу гуру которого можно спросить обо Всем!

Неактивен

 

#11 11.11.2012 23:20:55

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проставить значение в таблице если..

Что-о я не понимаю вашу мысль. Давайте вы приведете тестовые данные на 10 строк и объясните каким именно образом они должны копироваться.

Неактивен

 

#12 12.11.2012 00:02:48

Petr
Завсегдатай
Откуда: Москва
Зарегистрирован: 19.10.2011
Сообщений: 51

Re: Проставить значение в таблице если..

Тестовые данные у меня есть много товаров в магазине у которых в названии есть  Марка авто, Модель, начальный год и конечный и есть фильтр подбора по марке, для покупателей. В этом фильтре есть вот такая таблица, вы этой таблице в каждой строке записано от начала : Id товара, id марки, id модели и года. Эта запись говорит о том что товар подходит для определенного авто. В этой таблице make_id = 1; id с номером 1 это Toyota, model_id =  1; это Prius   т.е. товар подходит для Toyota Prius 2007-2009


(`product_id`,`make_id`,`model_id`,`begin_year`,`end_year`,`engine_id`)
('0', '1', '1', '2007', '2009', '0');
 

Так же есть таблица вида в ней находятся 2 поля информация из которых мне нужно что бы проставлялась в первую таблицу это - id товара, а далее нужно что бы поиск шел по `name`, выдергивая от туда ключевые слова и вставляя вместо них нужные id в первую.
oc_product_description` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `language_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `meta_description` varchar(255) NOT NULL,
  `meta_keyword` varchar(255) NOT NULL,
  `seo_title` varchar(255) NOT NULL DEFAULT '',
  `seo_h1` varchar(255) NOT NULL DEFAULT '',
  `custom_title` varchar(255) DEFAULT '',

Отредактированно Petr (12.11.2012 00:30:29)


Работаю над Сайтом http://tuningdom.ru/, Ищу гуру которого можно спросить обо Всем!

Неактивен

 

#13 12.11.2012 00:32:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проставить значение в таблице если..

Т.е. вам нужно формировать запросы вида:

insert into tab1 (`product_id`,`make_id`,`model_id`,`begin_year`,`end_year`,`engine_id`)
select `product_id`, 1, 1, if(name like '%2007-%',2007,if(name like '%2008-%',2008,'некорректные данные')) `begin_year`, ... from oc_product_description where name like '%Toyota%' and name like '%Prius %' and (name like '%2007-%' or name like '%2008-%' or name like '%2009-%' or ...) and ...

Неактивен

 

#14 12.11.2012 00:36:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проставить значение в таблице если..

Приведенный выше запрос будет работать если поле name содержит информацию о "Toyota Prius 2007-2009", а если в нем, например, нет данных о годах, то нет.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson