Задавайте вопросы, мы ответим
Вы не зашли.
Есть 2-е таблицы, 1-я товар с основными характеристиками, 2- я с доп характеристиками
1-я таб вида
products
products_id -- category_id -- products_price
соответсвтенно
ИД продукта
ИД категории
Цена
2-я вида
zn
zn_id -- products_id -- type_id -- zn_name
соответственно
ИД
ИД продукта
ИД типа доп характеристики
ИД значения доп характеристики
(к примеру: Есть товар "Цветок" в Категории "Трям", доп характеристики Наличие на складе - да, гарантия - месяц)
Получаеться что в 2-й таблице на каждый товар есть по несколько записей. Теперь собственно сам вопрос: Как организовать поиск таким маневром что бы
а) была возможность одновременного поиска как по главным характеристикам (читай в 1-й таблице) так и по доп характеристикам - одновременно и по нескольким критериям (к примеру хочу товар из категории "Живность" с ценой ххх и что бы был на складе)
б) при этом нормально работал не создавая бешенную нагрузку на проц.
P.S. Из проделаного
Вариант 1.
Создал временную таблицу в которую после выборки с обоих таблиц вносяться данные и иет выборка уже с 1-й таблицы. Работает но ооочень долго так как таблицы большие
Вариант 2.
Объеденил через INNER JOIN. Работает частично.
Вариант 3.
Сделать через WHERE zn_name IN (21,50) показывать любой ИД имеющий хоть одно из значений
P.P.S. хелп
Неактивен
Возможно самымбыстрым результатом будет выбока доп характеристик в один масив, а главный в второй - а потом их сравнение - общие элементы будут результатом
Неактивен
Вариант 2 правильный Только прийдется объединять несколько раз:
SELECT … FROM table1 JOIN table2 t2_1 JOIN table2 t2_2
WHERE t2_1 = … AND t2_2 = …
Неактивен
где ошибка?
SELECT
count(products.productID)
FROM
products
INNER JOIN zn ON (products.productID = zn.productID)
INNER JOIN zn ON (products.productID = zn.productID)
WHERE
products.categoryID = 2 AND
zn.type_id = 10 AND
zn.zn_name = 4 AND
zn.type_id = 2 AND
zn.zn_name = 37
Неактивен
как подключить?
если подключаю два раза таблица zn не уникальна
если как одна - то ничего не находит - так как поле не может одновременно иметь значение 10 и 2
Неактивен
Да, к каждой таблице нужен свой алиас — так, как я написал в примере:
JOIN zn zn1 ON …
JOIN zn zn2 ON …
Неактивен
можно для одаренных как правильно? - а то показывает найденных 0
SELECT
count(products.productID)
FROM
products
INNER JOIN zn zn1 ON (products.productID = zn1.productID)
INNER JOIN zn zn2 ON (products.productID = zn2.productID)
WHERE
products.categoryID = 2 AND
zn1.type_id = 10 AND
zn1.zn_name = 4 AND
zn2.type_id = 2 AND
zn2.zn_name = 37
Отредактированно Фдучфтвк (23.02.2010 17:23:10)
Неактивен
Запрос правильный. А данные такие есть?
Неактивен
Данные есть, 2-а раза проверил
Неактивен
Это я поторопился, работает - сейчас попробую еще раз.
paulus - огромное спасибо
Неактивен
Все работает. еще раз псиб
Неактивен