Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - ГлЮпый

Страницы: [1]
1
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 17:23:23 »
ок! еще раз спасибо

2
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 17:03:05 »
Цитировать
Макс:
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
но в этом случае что-то не срабатывает, он выдает только один ответ, хотя должен два, первыйже пример срабатвает правильно при любом количестве параметров, в чем я ошибся?

3
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 16:45:46 »
Цитировать
Forza:
Я понял, чего ГлЮпый хочет. Вывести товары, для которых присутствуют все из указанного набора параметров (1 и 10, например), да? Т.е. сопоставление 1 строки таблицы goods с несколькими из parameters.
Правда, пока сам запрос придумать не могу.

именно так :-)

4
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 16:22:42 »
Цитировать
Макс:
запись 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 - картинки товара

5
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 15:39:06 »
Цитировать
Макс:
напиши-ка сюда словами, что означает условие :
(name_id = 10 AND name_id = 1)


один и тот же товар обладает более чем одним параметром, соответственно более чем одна запись в таблице, необходимо соблюсти условие при котором будут выбраны только те товары для которых установлены все заданные в фильтре параметрами, то есть, необходимо выбрать только те товары, для которых на каждый из заданных параметров в таблице существует запись. Параметр характеризуется числом, порядковым номером, тобиш в случае когда "name_id = 10" товар соответствует заданному параметру. Так как параметров больше одного то и получаем структуру типа "name_id = 10 AND name_id = 1", жесткое соответствие на все заданные параметры.

P.S. не знаю сможет ли кто-то разобрать этот бред, под конец я уже и сам запутался :-(.

6
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 10:38:50 »
Цитировать
RomikChef:
она тебе, бесспорно, удалась


ты б помог лучше чем… а не ругал

7
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 10:32:25 »
Цитировать
RomikChef:
Альтернативу ЧЕМУ? Бессмысленному выражению? Я тебе сколько угодно альтернатив накидаю.

Пойди-ка ты, поспи.
или смени род занятий.


Согласен, выражение действительно бессмысленно, но я же не сказал что оно должно писаться именно так, это всего лишь попытка описать задачу.

Попробую переформулировать задачу

есть три таблицы
goods – хранит информацию по товарам
parameters – хранит параметры товара для выборки по фильтру, причем соответсвие товара заданному параметру задается парой «идентификатор товара»->>id параметра. В этой базе одному товару может соответствовать сколько угодно параметров, напрмер:
структура:`parameters` ( `id` int(11) NOT NULL auto_increment,  `name_id` int(11) default NULL, `goods_identifier` text NOT NULL,   PRIMARY KEY  (`id`))
данные:
1, 10, \'A50\'
2, 9, \'A50\'
3, 7, \'A50\'
4, 1, \'A50\'
5, 1, \'A52\'
6, 7, \'A52\'
7, 9, \'A52\'
8, 10, \'A52\'
Необходимо выбрать все товары параметры которых соответствуют заданным, то есть если для данного товара в таблице «parameters» есть соответствующая запись, но при этом нужно исключить те товары, для которых такой записи нет, также необходимо исключить те товары, для которых нет хотя бы одной записи соответствующей заданному параметру.

Эту схему я к нынешнему моменту реализовал путем двух последовательных запросов в базу с сортировкой результата, но эта схема очень медленна, поэтому ищу возможность реализовать все на одном запросе. Буде крайне признателен за любую помощь или идею.


P.S. поспать это конечно хорошо, но начальство требует результат, а тот что я могу предложить меня не удовлетворяет.

8
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 10:08:40 »
Цитировать
RomikChef:
Выбрать всех детей в классе, причем так, чтобы у ребенка был возраст и 1 год, и 10 лет.
Много ты таким запросом навыбираешь?


В том то и проблема что такой запрос не работает, а придумать работающую альтернативу не получается, вот и спрашаю, может кто чем помогет...

9
Базы данных / склейка двух таблиц
« : 27 Августа 2004, 10:00:07 »
есть запрос вида: SELECT goods.id, identifier, groups, sire, title, param, price, available, desc1, rating, limage3 FROM goods, parameters WHERE identifier = goods_identifier AND catalog_id=44 AND sire=7 AND (name_id  = 10 OR name_id  = 1)  GROUP BY goods.id ORDER BY rating LIMIT 0,10, нужен идентичный запрос но работающий при условии (name_id  = 10 AND name_id  = 1). У кого какие идеи?

Страницы: [1]