SELECT из 2-х таблиц с LEFT JOIN, проблема с запросом

DpoHro

Новичок
SELECT из 2-х таблиц с LEFT JOIN, проблема с запросом

В таблице a - объявления, если есть a.firm_id - то объявление от фирмы, иначе от частника. Соотв-но если фирма то поля из cmp есть иначе нету.
Делается 2 запроса, один выбирает нужные записи:

Код:
SELECT
        a.*, cmp.*
            FROM adverts AS a 
            LEFT JOIN  company AS cmp ON cmp.id=a.firm_id
        WHERE ... ORDER BY calccost ASC
Еще один запрос для постраничного вывода:

Код:
 SELECT COUNT(a.id) AS `count` FROM adverts AS a 
                WHERE ...
В обоих запросах WHERE только по таблице a

Все было ничего, пока не понадобилось добавить условие по cmp, там есть параметр по которому записи cmp.services_blocked<>'1' не должны попадать в выборку.

Голову сломал ((

Нужно чтобы отбирались все записи при a.firm_id=0 (то есть из 2-й табицы тут данных не будет), а при a.firm_id>0 только те что соответствуют условию cmp.services_blocked<>'1'
 

DpoHro

Новичок
Нужно чтобы отбирались все записи при a.firm_id=0 (то есть из 2-й табицы тут данных не будет), а при a.firm_id>0 только те что соответствуют условию cmp.services_blocked<>'1'
Еще не очень понимаю как добавить LEFT JOIN company AS cmp ON cmp.id=a.firm_id во вторую таблицу с тем же условием.

-~{}~ 26.10.09 22:22:

((a.firm_id=0) OR (cmp.services_blocked<>'1'))
??

)) спать хочется совсем
 

.des.

Поставил пиво кому надо ;-)
cmp.services_blocked!=1 OR cmp.id IS NULL
или
cmp.services_blocked!=1 OR cmp.services_blocked IS NULL

надо смотреть explain

возможно простым и гораздо более эффективным будет добавить фирму с id=0 и делать inner join c фильтрацие по service_blocked

Кстати services_blocked<>1 это плохо.. гораздо лучше services_blocked=0
 
Сверху