Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Добавить позицию в несколько категорий

Сообщения:  [1-10] 

 
 автор: cheops   (27.12.2006 в 03:11)   письмо автору
 
   для: Ivan   (27.12.2006 в 02:49)
 

Используйте конструкцию GROUP BY для группировки объектов
SELECT DISTINCT objects.* 
FROM objects, objects_clones 
WHERE objects.id = objects_clones.obj_id 
AND ( 
objects_clones.cat_id 
IN ( 5, 6, 4, 3, 2 )  
OR objects_clones.cat_id = '1' 
)
GROUP BY objects.id

   
 
 автор: Ivan   (27.12.2006 в 02:49)   письмо автору
 
   для: cheops   (26.12.2006 в 19:57)
 

Попробовал, должно работать.
Один нюанс еще. У меня выборка из родительской категории включает в себя также данные по подкатегориям. Получается в результате один объект забирается несколько раз. Добавил DISTINCT в запрос, наверно, еще притормозит..


SELECT DISTINCT objects.*
FROM objects, objects_clones
WHERE objects.id = objects_clones.obj_id
AND (
objects_clones.cat_id
IN ( 5, 6, 4, 3, 2 ) 
OR objects_clones.cat_id = '1'
)


Без DISTINCT не получится?

   
 
 автор: cheops   (26.12.2006 в 19:59)   письмо автору
 
   для: Ivan   (26.12.2006 в 19:31)
 

Теперь запрос будет выглядеть примерно следующим образом
SELECT objects.* FROM objects, objects_clones
WHERE objects.id = objects_clones.obj_id AND objects_clones.cat_id = 222 AND price>100 
LIMIT 0,20

   
 
 автор: cheops   (26.12.2006 в 19:57)   письмо автору
 
   для: Ivan   (26.12.2006 в 19:44)
 

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

   
 
 автор: Ivan   (26.12.2006 в 19:44)   письмо автору
 
   для: cheops   (26.12.2006 в 19:18)
 

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

Просто, если все же взять и записать в столбец для категории объекта строку из массива уникальных значений категорий, сделать fullindex и искать себе каждый раз.
Тогда доп. таблица ни к чему, и даже кой-какие преимущества, кажется, есть...

   
 
 автор: Ivan   (26.12.2006 в 19:31)   письмо автору
 
   для: cheops   (26.12.2006 в 19:18)
 

Объект:
id, cat(категория), name(название), descr(краткое описание), description(описание), price(цена) ...... куча других параметров....

Категории:
id, parent(родительская категория), descr(описание категории), items (кол-во объектов в категории и подкатегориях)..... некоторые другие параметры

Если добавляем таблицу objects_clones, то пишем в нее столбцы, допустим - clone_id, cat_id, obj_id

То есть запрос был примерно такой:
SELECT * FROM objects WHERE cat = 222 AND price>100 LIMIT 0,20

   
 
 автор: cheops   (26.12.2006 в 19:18)   письмо автору
 
   для: Ivan   (26.12.2006 в 19:02)
 

В этом случае придётся воспользоваться многотабличным запросом. Приведите структуру ваших таблиц?

   
 
 автор: Ivan   (26.12.2006 в 19:02)   письмо автору
 
   для: cheops   (26.12.2006 в 18:34)
 

Поиск... имел в виду выборку по какому-нибудь критерию, допустим - цена товара, и по категории объекта
Цена будет храниться в таблице объектов, а категории -в таблице экземпляров объектов

Тогда как примерно должна идти выборка? скажем, отсортировать объекты данной подкатегории по стоимости
путаюсь с составлением запроса в базу..

   
 
 автор: cheops   (26.12.2006 в 18:34)   письмо автору
 
   для: Ivan   (26.12.2006 в 17:48)
 

Да в этом случае прибегают к допольнительной таблице... не очень понятны затруднения с поиском, вы же будете искать по таблице объектов?

   
 
 автор: Ivan   (26.12.2006 в 17:48)   письмо автору
 
 

На данный момент есть табличка с подробными данными объекта (товара, организации...), там указан номер категории, к которой этот объект принадлежит. Отдельно табличка категорий.
Хочется сделать возможность для добавления объекта в несколько категорий.
Как лучше такое организовать, да чтоб еще нормально можно было производить поиск по базе объектов, выборку для конкретной категории и пр.

В табличке с данными по объекту записывать в столбец для категории несколько значений - вряд ли оптимально - при простой выборке для определенной категории проверить этот столбец для всех объектов...
Видимо, надо создать дополнительную таблицу для экземпляров объекта по категориям?
Только как тогда с поиском, не соображу пока...

   

Сообщения:  [1-10] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования