Общие > Базы данных

склейка двух таблиц

<< < (3/4) > >>

ГлЮпый:

--- Цитировать ---Макс:
запись 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
но в этом случае что-то не срабатывает, он выдает только один ответ, хотя должен два, первыйже пример срабатвает правильно при любом количестве параметров, в чем я ошибся?

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии