Чтение RSS каналов

Форум

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

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

0

0
1
28.02.2013 21:10:2228.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: PHP 5
Сервер: Сервер в интернете
3.92

3.92
2
28.02.2013 21:22:3928.02.2013 21:25:03
возможно в верхнем примере можно поставить OR вместо AND, но как их расставить например здесь?


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


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

3.92
3
02.03.2013 14:01:1402.03.2013 14:02:01

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


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

3.91
4
02.03.2013 18:59:50
Блин... извини, я подсказал не верно, я, кажись, не правильно понял первое твое сообщение...
3.91

3.91
5
02.03.2013 20:39:55
я с in вроде пробовал до этого - как то не вышло
3.92

3.92
6
03.03.2013 05:08:47
пробуй GROUP BY a.lid
3.91

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

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

3.92
8
15.03.2013 17:44:1815.03.2013 17:45:57

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

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

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

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

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

3.91
9
15.03.2013 17:47:5015.03.2013 17:48:33

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


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

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

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь