За последние 24 часа нас посетили 69900 программистов и 1582 робота. Сейчас ищет 1201 программист ...

Синтаксис запроса выборки

Тема в разделе "PHP и базы данных", создана пользователем sgtpepper2000, 10 дек 2014.

  1. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    Добрый вечер!

    Есть запрос, который перебирает подходящие объекту заявки по нескольким параметрам:
    Код (Text):
    1. SELECT t1.Id AS BidId
    2. FROM unsatisfied_bids AS t1
    3. LEFT JOIN unsatisfied_bids_flats AS t2 ON t1.Id=t2.BidId
    4. WHERE t1.Id NOT IN (SELECT t2.BidId FROM unsatisfied_bids_collation AS t2 WHERE ObjectId=71)
    5. AND t1.CategoryId=1
    6. AND t1.Status<>3
    7. AND IF(t1.PriceFrom,t1.PriceFrom>[цена объекта],1=1)
    8. AND t1.CityId=1 AND [ид района объекта] IN t1.DistrictIds
    По нему имеются сразу два вопроса:
    1. Вот эта строка AND IF(t1.PriceFrom,t1.PriceFrom>0,1=1) — должна проверять указана ли «Цена От» в записи целевой таблицы, и если да, сравнивать со значением цены объекта, если нет просто пропускать это условие-фильтр.
    2. В целевой таблице есть поле DistrictIds, в котором хранятся через запятую допустимые ид-шники районов (например: 1,3,4,7). Я же, другими словами, пытаюсь сделать такое условие: 1 IN (1,3,4,7). Однако оно синтаксически неверно. Можно ли его как-то переписать, не создавая доп. связующей таблицы?
     
  2. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    1. Решилось переписью выражения:
    Код (Text):
    1. AND ((t1.PriceFrom>0 AND t1.PriceFrom<=[цена]) OR t1.PriceFrom=0)
    2. Решилось переписью выражения (однако, не лучший вариант по производительности):
    Код (Text):
    1. AND (t1.DistrictIds LIKE "%,[ид района],%" OR t1.DistrictIds LIKE "[ид района],%" OR t1.DistrictIds LIKE "%,[ид района]" OR t1.DistrictIds="")