Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте!
Прошу о помощи в составлении корректного запроса.
Имеется одна таблица `products` в ней находятся товары, товары могут быть в разных категориях и также могут повторятся несколько раз(дублироваться со ссылкой на айди оригинального товара)
В ней есть поля:
`id` (id товара)
`category_id` (id категории)
`unique` (это ссылка на оригинальный товар, если товар оригинален, то ему присваивается значение 0, если товар является дубликатом, то в этом поле стоит значение поля `id` оригинала)
`name` (название товара)
..... (остальные поля типа цены и т.д.)
CREATE TABLE `products` (
`id` INT NOT NULL ,
`category_id` INT NOT NULL ,
`unique` INT NOT NULL ,
`name` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
INDEX ( `category_id` , `unique` )
) ENGINE = MYISAM ;
Я хочу из базы в 5000 товаров найти те товары, у которых нету дубликатов, чтобы продублировать их в дополнительные категории, также я хочу видеть те товары, которые уже имеют копии.
Мои запросы либо неправильны либо очень медленны настолько, что выдаёт script_execution_time_exceeded
Вот код для поиска товаров с дубликатами (я привязываю таблицу товаров к самой себе), который работает неправильно:
SELECT `products` . * ,
`p2`.`id`
FROM `products`
LEFT JOIN `products` AS `p2` ON `p2`.`unique` = `products`.`id`
WHERE `p2`.`id`!=NULL
Второй вариант:
SELECT *, (@id:=`products`.id) AS `id` FROM `products` WHERE (SELECT `id` FROM `products` WHERE `unique`=@id)!=NULL
Сижу читаю мануалы и форумы, вижу фигу. Нужна помощь.
Заранее спасибо всем тем, кто откликнется!
Неактивен
Для проверки является ли величина NULL, нужно использовать IS NULL, IS NOT NULL
WHERE `p2`.`id` IS NOT NULL
Неактивен
Страниц: 1