[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос поиска по двум таблицам
123456
Имеется две таблицы: 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

Нечего не должен вернуть
123456
нет никаких вариантов?
walerus
Цитата
а вот запрос:

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
123456
walerus
p3 имеется, а вот p2 нет, а должно быть хотя бы 1
123456
должны выполняться все условия
walerus
Кто то из нас не выспался видимо...
Условие
Цитата
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
123456
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
123456
Цитата
таблица 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
123456 ааа, теперь понятно, да, реально не так понял... laugh.gif нуно подумать.
Alchemist
Стандартная задача на строгое соответствие многочисленным условиям. Решалась тут на форуме тысячу раз, последний, если не ошибаюсь, что-то около месяца-двух назад. Поиск тебе в помощь...
123456
Alchemist
как в поиск вбивать то? huh.gif
kaww
123456, http://phpforum.su/index.php?showtopic=83921
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.