Открыть Ответить

помогите с mysql запросом

28.02.2013 21:10:22 28.02.2013 21:11:46

у каждого товара есть поле keywords, содержит допустим "черный, красный, эксклюзивный, белый, красивый"

допустим по запросу

SELECT lid from products WHERE keywords LIKE '%белое%'


выводит 45 товаров, а по запросу

SELECT lid from products WHERE keywords LIKE '%черное%'


выводит 55 товаров. была у меня такая логика, что запрос

SELECT lid from products WHERE keywords LIKE '%белое%' AND keyw LIKE '%черное%'


выведет 45 черных и 55 белых, то есть 45+55 = 100 черных и белых товаров, но... ничего не выводит... или выводит 2-3 товара. как же мне составить такой запрос, чтобы при увеличении количества условий, выводило собственно списком все товары, подходящие под них?

SLAED CMS 2.6 Lite
PHP 5
Сервер в интернете
Goshan
  • Группа: Посетители
  • Пункты: 729
  • Регистрация: 07.10.2006
  • Пол: Мужчина
  • Из: Россия/Москва
Goshan
3.91

3.91

28.02.2013 21:22:39 28.02.2013 21:25:03

возможно в верхнем примере можно поставить OR вместо AND, но как их расставить например здесь?

<br /> SELECT a.lid, a.cid, a.title, a.keyw FROM products a, products_data b WHERE a.lid = b.did AND b.enable = '1' AND b.fam = '1' AND a.keyw LIKE '%белое%' AND a.keyw LIKE '%черное%' AND a.keyw LIKE '%черно-белое%' AND a.keyw LIKE '%красное%' AND a.keyw LIKE '%зеленое%' LIMIT 0,300<br />


b.fam - это главный параметр. а те что с цветами - должны показываться только если он =1

Goshan
  • Группа: Посетители
  • Пункты: 729
  • Регистрация: 07.10.2006
  • Пол: Мужчина
  • Из: Россия/Москва
Goshan
3.91

3.91

02.03.2013 14:01:14 02.03.2013 14:02:01

выведет 45 черных и 55 белых


Ясень перец ничего не выведет, 2 цвета не может быть в одном товаре, меняйте на WHERE a.keyw IN ('перечисления')

sam07
  • Группа: Посетители
  • Пункты: 772
  • Регистрация: 01.06.2006
  • Пол: Мужчина
  • Из: Моздок
sam07
3.91

3.91

Блин... извини, я подсказал не верно, я, кажись, не правильно понял первое твое сообщение...

sam07
  • Группа: Посетители
  • Пункты: 772
  • Регистрация: 01.06.2006
  • Пол: Мужчина
  • Из: Моздок
sam07
3.91

3.91

я с in вроде пробовал до этого - как то не вышло

Goshan
  • Группа: Посетители
  • Пункты: 729
  • Регистрация: 07.10.2006
  • Пол: Мужчина
  • Из: Россия/Москва
Goshan
3.91

3.91

пробуй GROUP BY a.lid

sam07
  • Группа: Посетители
  • Пункты: 772
  • Регистрация: 01.06.2006
  • Пол: Мужчина
  • Из: Моздок
sam07
3.91

3.91

13.03.2013 18:01:25 13.03.2013 18:16:51

запрос select title, keyw from products where keyw in ('черное, сатин') выводит 0. хоть очень много элементов у которых в keyw есть оба этих слова.

логика такова - у каждого товара есть строка ключевых слов (keyw) тут вперемешку указываются параметры: цвет, ткань, производитель. есть блок "Поиск по параметрам" с галочками. Соответственно человек может наставить любое количество галок, он может захотеть сразу увидеть товар допустим красного, черного, синего цвета + двух каких то производителей. соответственно надо вывести товары.

Goshan
  • Группа: Посетители
  • Пункты: 729
  • Регистрация: 07.10.2006
  • Пол: Мужчина
  • Из: Россия/Москва
Goshan
3.91

3.91

15.03.2013 17:44:18 15.03.2013 17:45:57

тут вперемешку указываются параметры: цвет, ткань, производитель

ужасное распределение базы, согласны?

1 вариант: Вобщем, вам надо пробегать LEFT JOIN-ом столько раз, сколько поставили галочек в поиске. Далее объединить результаты при помощи GROUP BY

2) вариант: Искомые POST данные собираем в массив.
Прогоняем через foreach получаем туеву хучу запросов. Объединяем результаты запроса в массив. Далее array_unique()

Это теория. На практике смотрите сами

sam07
  • Группа: Посетители
  • Пункты: 772
  • Регистрация: 01.06.2006
  • Пол: Мужчина
  • Из: Моздок
sam07
3.91

3.91

15.03.2013 17:47:50 15.03.2013 17:48:33

запрос select title, keyw from products where keyw in ('черное, сатин') выводит 0. хоть очень много элементов у которых в keyw есть оба этих слова.


Здесь запрос должен вернуть РАЗНЫЕ строки у которых и "то" и "то", но не как ни строки у которых эти данные "хрен пойми как записаны"

sam07
  • Группа: Посетители
  • Пункты: 772
  • Регистрация: 01.06.2006
  • Пол: Мужчина
  • Из: Моздок
sam07
3.91

3.91

Открыть Ответить

Хотите опробовать SLAED CMS в действии?

Идеи и предложения
Обратная связь