Имеется две таблицы: ads и ads_attr
ads
-----------------
id | name | price
----------
1 | gfadsf | 500
2 | fdhdh | 300
3 | vbcvb | 100
4 | bcbdvf | 4500
5 | bbfbfg | 1450
таблица ads_attr
id | id_ads | key | num
----------------------------
1 | 2 | p1 | 3
2 | 2 | p3 | 1
3 | 2 | p4 | 2
4 | 2 | p8 | 4
5 | 3 | p1 | 3
6 | 3 | p2 | 2
Таблица ads содержит название объявления и цену, а таблица ads_attr содержит параметры объявления.
На сайте имеется форма поиска, где пользователь указывает price, p1, p2, p3, p4, p5, и т.д.
Как правильно составить запрос который выводил бы записи, удовлетворяющие параметрам поиска(указанные параметры должны быть <= тем, которые установлены у объявления(.
К примеру пользователь задал:
price = 50
p1 = 3
p2 = 1
Запрос должен вернуть: 3 | vbcvb | 100
а вот запрос:
price = 50
p1 = 3
p2 = 1
p3 = 1
Нечего не должен вернуть
walerus
5.12.2014 - 11:18
Цитата |
а вот запрос:
price = 50 p1 = 3 p2 = 1 p3 = 1
Нечего не должен вернуть |
Почему?, ведь введенное значения для p3 = 1, что устраивает условию <= ...
потом как
Цитата |
таблица ads_attr
id | id_ads | key | num ---------------------------- 1 | 2 | p1 | 3 2 | 2 | p3 | 1 3 | 2 | p4 | 2 4 | 2 | p8 | 4 5 | 3 | p1 | 3 6 | 3 | p2 | 2 |
walerus
p3 имеется, а вот p2 нет, а должно быть хотя бы 1
должны выполняться все условия
walerus
5.12.2014 - 12:29
Кто то из нас не выспался видимо...
Условие
Цитата |
price = 50 p1 = 3 p2 = 1 p3 = 1 |
данные
Цитата |
ads ----------------- id | name | price ---------- 1 | gfadsf | 500 2 | fdhdh | 300 3 | vbcvb | 100 4 | bcbdvf | 4500 5 | bbfbfg | 1450
таблица ads_attr
id | id_ads | key | num ---------------------------- 1 | 2 | p1 | 3 2 | 2 | p3 | 1 3 | 2 | p4 | 2 4 | 2 | p8 | 4 5 | 3 | p1 | 3 6 | 3 | p2 | 2 |
смотрим...
условие: price = 50 в таблице "3 | vbcvb | 100" что удовлетворяет условию <= т.е. TRUE
условие: p1 = 3 в таблице "1 | 2 | p1 | 3" что удовлетворяет условию <= т.е. TRUE
условие: p2 = 1 в таблице "6 | 3 | p2 | 2" что удовлетворяет условию <= т.е. TRUE
условие: p3 = 1 в таблице "2 | 2 | p3 | 1" что удовлетворяет условию <= т.е. TRUE
так в чем проблема? все условия TRUE
walerus, ты не правильно понял задачу.
Цитата |
Таблица ads содержит название объявления и цену, а таблица ads_attr содержит параметры объявления. |
Цитата |
price = 50 p1 = 3 p2 = 1 p3 = 1 |
т.е. из таблицы ads нам необходимо выбрать записи, где price <= 50 и в то же время, чтоб в таблице ads_attr для данного объявления(id_ads) выполнялись условия p1 <= 3
p2 <= 1
p3 <= 1
Цитата |
таблица ads_attr
id | id_ads | key | num ---------------------------- 1 | 2 | p1 | 3 2 | 2 | p3 | 1 3 | 2 | p4 | 2 4 | 2 | p8 | 4 5 | 3 | p1 | 3 6 | 3 | p2 | 2
|
id_ads - ссылка на объявление из таблицы ads
walerus
5.12.2014 - 13:42
123456 ааа, теперь понятно, да, реально не так понял...

нуно подумать.
Alchemist
5.12.2014 - 14:09
Стандартная задача на строгое соответствие многочисленным условиям. Решалась тут на форуме тысячу раз, последний, если не ошибаюсь, что-то около месяца-двух назад. Поиск тебе в помощь...
Alchemistкак в поиск вбивать то?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.