Обновление. Прокрутите до боттема для SQL-кода и вывода. Я недавно начал работать над базой данных квартир.База данных содержит 2 таблицы
Таблица «Недвижимость» хранит информацию об основных квартирных комплексах (контактные данные и фотографии).На него ссылается столбец propid
Таблица b "Планы этажей" содержит информацию об отдельных арендуемых единицах.информация о ценах, площадь участка и тип квартиры.На таблицу floorplan
также ссылается столбец propid
, чтобы позволить нам связать две таблицы вместе.У него также есть собственный уникальный идентификатор, но он не используется.
Обычно на каждый комплекс приходится 5-10 этажей.
Я создаю интерфейс поиска по интерфейсу для наших клиентов на нашем веб-сайте.Мне нужна возможность искать недвижимость с планами этажей, которые соответствуют критериям поиска.но, выполняя оператор соединения, я замечал, что он продолжает давать мне список с тем же свойством в нем каждый раз, когда обнаруживается, что один из его этажей соответствует критериям поиска.
Я провел небольшое исследование по этому вопросу.Наиболее распространенный ответ - SELECT DISTINCT.
Проблема в том, что в результате мне нужно больше, чем просто пропид.
Я пытался сделать что-то вроде этого:
SELECT DISTINCT (p.propid), p.*, f.* FROM property AS p
LEFT JOIN floorplans AS f ON p.propid = f.propid
WHERE f.pricespecial BETWEEN [min_price] AND [max_price];
[min_price]
и [max_price]
предоставляются пользователем.
Предполагаемым результатом будет список всех свойств, имеющих планы этажей, которые соответствуют всем критериям поиска пользователей.Но я не хочу, чтобы одно и то же свойство возвращалось для каждой подходящей единицы.
Когда я запускаю этот запрос, я все еще получаю дублирующиеся свойства
В прошлом я просто запускал сценарий фильтра для xmlканал, содержащий данные.Сценарий будет определять максимальную и минимальную цену в свойстве givin и добавлять эти значения во 2 вновь создаваемых столбца таблицы свойств price_min
и price_max
.до сих пор это было достаточно хорошо, но компания настаивала на более точных результатах поиска.
Единственный другой вариант, который я вижу, - это просто выполнить запрос, возвращая только пропид DISTINCT.Затем выполните второй запрос для получения фактических данных.
IE
$sql = "SELECT DISTINCT p.propid FROM property as f" .
"LEFT JOIN floorplans AS f" .
"WHERE f.price BETWEEN " . $_REQUEST['price_min'] . " AND " . $_REQUEST['price_max'] . "
EDIT **
некоторые примеры вывода с использованием недавно пересмотренного sqlstatment.
propid name pricespecial
4230A 2222 Smith Street $1225-1450
4230A 2222 Smith Street $1895-2045
4230A 2222 Smith Street $2220
4679A City Place Midtown $1230-1599
4679A City Place Midtown $1595-1650
4679A City Place Midtown $1699-2195
4572A Gables Memorial Hills $1308-2159
4572A Gables Memorial Hills $2050-2693
4606A Venue Museum District $1535-1930
4606A Venue Museum District $1980-2550
У меня были проблемы с публикацией этого комментария, поэтому я просто отредактировал свой вопрос.