Прежде чем я начну:
Вы НИКОГДА не должны помещать полученные пользователем значения прямо в ваш SQL.
Позвольте мне помочь, сделав вещи немного яснее:
$sql = "
SELECT DISTINCT
mls_listings.c1,
mls_listings_images.c1,
mls_listings.c2,
mls_listings.c3,
mls_listings_images.c3 as image,
mls_listings_images.c5,
mls_listings.c4,
mls_listings.c5,
mls_listings.c6,
mls_listings.c7,
mls_listings.c8,
mls_listings.c9
FROM
mls_listings,
mls_listings_images
WHERE
(mls_listings.c1 = mls_listings_images.c1) AND
(mls_listings_images.c5 = '1') AND
(mls_listings_images.c1 LIKE '%{$_GET['uniqueid']}%') AND
(mls_listings.c3 IN (
'{$_GET['redondobeach']}',
'{$_GET['santamonica']}',
'{$_GET['specificcity']}',
'{$_GET['hermosabeach']}',
'{$_GET['elsegundo']}',
'{$_GET['manhattanbeach']}',
'{$_GET['marinadelrey']}',
'{$_GET['palosverdes']}',
'{$_GET['playadelrey']}',
'{$_GET['playavista']}',
'{$_GET['torrance']}',
'{$_GET['venice']}',
'{$_GET['westchester']}')
) AND
(mls_listings.c7 LIKE '%{$_GET['zipwestla']}%') AND
(mls_listings.c5 LIKE '%{$_GET['beds']}%') AND
(mls_listings.c6 LIKE '%{$_GET['baths']}%') AND
(
mls_listings.c4 >= '{$_GET['minprice']}' AND
mls_listings.c4 <= '{$_GET['maxprice']}'
)
ORDER BY mls_listings.c4";
Любой флажок, который не отмечен, ничего не вернет обратно в PHP. Если у вас включены ошибки, вы получите уведомление о неопределенных значениях для всех этих не отмеченных флажков. Интерпретатор PHP выдаст пустую строку при попытке их использования.
Теперь это работает, когда вы используете города, потому что условие (ml_listings.c3 IN (....))
найдет совпадение, а условие (mls_listings.c7 LIKE '%{$_GET['zipwestla']}%')
соответствует всему, потому что оно переходит в (mls_listings.c7 LIKE '%%')
.
Если вы просто ищете с галочкой zipwestla (и я предполагаю, что это то, что вы пытаетесь), тогда условие (ml_listings.c3 IN (....))
ничего не соответствует, оно превращается в (ml_listings.c3 IN ('','','', '','','', '','','', '','','', ''))
, так что если запись в ml_listings.c3 не является пустая строка совпадений не будет.
Вам действительно нужно вернуться и переработать это, но раз вы спрашиваете, вот мое предложение:
SELECT DISTINCT
mls_listings.c1,
mls_listings_images.c1,
mls_listings.c2,
mls_listings.c3,
mls_listings_images.c3 as image,
mls_listings_images.c5,
mls_listings.c4,
mls_listings.c5,
mls_listings.c6,
mls_listings.c7,
mls_listings.c8,
mls_listings.c9
FROM
mls_listings,
mls_listings_images
WHERE
(mls_listings.c1 = mls_listings_images.c1) AND
(mls_listings_images.c5 = '1') AND
(mls_listings_images.c1 LIKE '%{$_GET['uniqueid']}%') AND
((mls_listings.c3 IN (
'{$_GET['redondobeach']}',
'{$_GET['santamonica']}',
'{$_GET['specificcity']}',
'{$_GET['hermosabeach']}',
'{$_GET['elsegundo']}',
'{$_GET['manhattanbeach']}',
'{$_GET['marinadelrey']}',
'{$_GET['palosverdes']}',
'{$_GET['playadelrey']}',
'{$_GET['playavista']}',
'{$_GET['torrance']}',
'{$_GET['venice']}',
'{$_GET['westchester']}')
) OR
(mls_listings.c7 LIKE '%{$_GET['zipwestla']}%')) AND
(mls_listings.c5 LIKE '%{$_GET['beds']}%') AND
(mls_listings.c6 LIKE '%{$_GET['baths']}%') AND
(
mls_listings.c4 >= '{$_GET['minprice']}' AND
mls_listings.c4 <= '{$_GET['maxprice']}'
)
ORDER BY mls_listings.c4
Имейте в виду, что, если ничего не отмечено, это вернет все в базу данных, так как оно будет счастливо соответствовать всем строкам в mls_listings.c7
. Из-за того, что ты выглядишь как дон, это может быть даже полезным поведением.
Но, пожалуйста, очень, пожалуйста, очень, пожалуйста, с вишенкой наверху, иди посмотрите связанные переменные в руководстве.