Общие > Базы данных
склейка двух таблиц
ГлЮпый:
--- Цитировать ---Макс:
запись name_id = 10 AND name_id = 1 - неправильная
--- Конец цитаты ---
этоя и сам знаю. что касается структуры, таблицу parameters я уже приводил выше, вот коментарии к ней:
`parameters` ( `id` int(11) NOT NULL auto_increment, `name_id` int(11) default NULL, `goods_identifier` text NOT NULL, PRIMARY KEY (`id`))
id - думаю понятно без коментария
name_id - порядковый номер параметра
goods_identifier - идентификатор товара (его уникальный код)
касательно таблицы goods:
CREATE TABLE `goods` (
`id` int(11) NOT NULL auto_increment,
`identifier` varchar(50) default NULL,
`groups` varchar(255) default NULL,
`sire` varchar(255) default NULL,
`title` varchar(255) default NULL,
`param` varchar(255) default NULL,
`desc1` text,
`desc2` longtext,
`catalog_id` int(11) default NULL,
`price` double(5,2) default NULL,
`price1` double(5,2) default NULL,
`price2` double(5,2) default NULL,
`price3` double(5,2) default NULL,
`guarantee` varchar(255) default NULL,
`available` int(11) default NULL,
`rating` int(11) default NULL,
`price_num` int(11) default NULL,
`update1` int(11) default NULL,
`fack_id` int(11) default NULL,
`count1` int(11) default NULL,
`limage1` varchar(255) default NULL,
`limage2` varchar(255) default NULL,
`limage3` varchar(255) default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM ;
id - порядковый номер записи
identifier - идентификатор товара (его уникальный код)
groups - группа товара
sire - производитель
title - название
param - дополнительный параметр (используется как расширение названия)
desc1 - краткое описание
desc2 - расширенно описание
catalog_id - номер каталога которому ссответсвует товар
price, price1, price2, price3 - цены на товар
guarantee - гарантийный срок
available - наличие
rating - рейтинг товара
price_num - номер прайс листа
update1 - дата обнвления записи
fack_id - идентификатор отвественного за обновление
count1 - уж и непомню шо воно таке, не используется в общем
limage1, limage2, limage3 - картинки товара
Forza:
Я понял, чего ГлЮпый хочет. Вывести товары, для которых присутствуют все из указанного набора параметров (1 и 10, например), да? Т.е. сопоставление 1 строки таблицы goods с несколькими из parameters.
Правда, пока сам запрос придумать не могу.
ГлЮпый:
--- Цитировать ---Forza:
Я понял, чего ГлЮпый хочет. Вывести товары, для которых присутствуют все из указанного набора параметров (1 и 10, например), да? Т.е. сопоставление 1 строки таблицы goods с несколькими из parameters.
Правда, пока сам запрос придумать не могу.
--- Конец цитаты ---
именно так :-)
Макс:
SELECT goods_identifier, COUNT(*) as amount FROM parameters
WHERE name_id = 10 OR name_id = 1
GROUP BY goods_identifier
HAVING amount = 2; //
получишь список goods_identifier у которых указаны оба параметра.
Как одним запросом - не знаю, возможно сработает такое :
--- Код: ---
SELECT
goods.id, identifier, groups, sire, title,
param, price, available, desc1, rating, limage3 ,
[b] COUNT(goods_identifier) as goods_identifier_amount [/b]
FROM
goods, parameters
WHERE
identifier = goods_identifier AND catalog_id=44
AND sire=7 AND (name_id = 10 OR name_id = 1)
[b]GROUP BY goods_identifier
HAVING goods_identifier_amount = 2[/b]
ORDER BY rating LIMIT 0,10
--- Конец кода ---
Почему в HAVING используется именно двойка , подумай сам. Она там не всегда будет.
ГлЮпый:
--- Цитировать ---Макс:
SELECT goods_identifier, COUNT(*) as amount FROM parameters
WHERE name_id = 10 OR name_id = 1
GROUP BY goods_identifier
HAVING amount = 2;
--- Конец цитаты ---
точто доктор прописал :-), Макс с меня пиво как буду в Кременчуге, аль как ты в Киеве объявишся...
еще один вопрос, если я правильно понял синтаксис второго примера то для, положим трех параметров, он будет таким:
SELECT goods.id, identifier, groups, sire, title, param, price, available, desc1, rating, limage3, COUNT( goods_identifier ) AS goods_identifier_amount
FROM goods, parameters
WHERE identifier = goods_identifier AND catalog_id =44 AND sire =7 AND (
name_id =9 OR name_id =1 OR name_id =7
)
GROUP BY goods_identifier
HAVING goods_identifier_amount =3
ORDER BY rating
LIMIT 0 , 10
но в этом случае что-то не срабатывает, он выдает только один ответ, хотя должен два, первыйже пример срабатвает правильно при любом количестве параметров, в чем я ошибся?
Навигация
Перейти к полной версии