по поводу cross и left join в одном запросе

slip

Guest
по поводу cross и left join в одном запросе

есть конструкция где нам нужно объединить некоторые запросы с использованием Cross Join и условием left join

в общем не рабочий запрос:

PHP:
$query = "select * FROM users_data, zakaz, sklad, otgruzka as a LEFT JOIN zakaz AS b WHERE a.id_ot = b.id AND users_data.user = zakaz.username AND zakaz.${sel} LIKE '%$what%' AND users_data.type ='user' AND sklad.kolvo IS NOT NULL GROUP BY a.id_ot";
А вообще если на словах мне нужно объединить

users_data.user
zakaz.username
zakaz.${sel} LIKE '%$what%'
users_data.type ='user'
sklad.kolvo IS NOT NULL

где значения zakaz.id отсутствуют в otgruzka.id_ot. В чем ошибка в моем запросе? он просто напросто игнорирует LEFT JOIN и выполняет все условия что идут дальше...

спасибо.
 

Profic

just Profic (PHP5 BetaTeam)
Первое, что брасается в глаза - дублирование таблицы zakaz
 

slip

Guest
а как можно его избежать если мне нужно сравнить значения в разных столбцах? например zakaz.id с чем то там и сделать поиск по zakaz.kolvo ?? через алиасы?

-~{}~ 01.07.05 19:18:

а понял, zakaz поменять на алиас A, но все равно что то не идет...
 

Profic

just Profic (PHP5 BetaTeam)
пойди ка ты прочти вначале про join-ы
и пойми, что соединяются НЕ СТОЛБЦЫ, а ТАБЛИЦЫ ЦЕЛИКОМ.

потом сделай своему запросу EXPLAIN и ужаснись. ибо по приведенному примеру у должно образоваться 3 полных декартовых произведения.

уй. да этот запрос вообще попахивает ересью.
теперь еще раз то же самое, но без объединения столбцов, а с объединением таблиц и условиями отдельно.
 

slip

Guest
блин, стараемся как можем... Ладно, спасибо, щас будем попробовать...
 

chira

Новичок
пробуй
Код:
select * 
FROM users_data u
, zakaz z
, sklad s
LEFT JOIN otgruzka as a ON a.id_ot = z.id
WHERE u.user = z.username
 AND z.${sel} LIKE '%$what%'
 AND z.id = s.id_sklad
 AND u.type ='user'
 AND s.kolvo IS NOT NULL
 AND a.id IS NULL
GROUP BY z.id
 

slip

Guest
А я сделал через вложенные селекты

select * FROM users_data, sklad, zakaz WHERE zakaz.id NOT IN (SELECT id_otgr FROM otgruzka) AND users_data.user = zakaz.username AND sklad.id_sklad = zakaz.id AND users_data.user_id = 32 AND sklad.kolvo IS NOT NULL

А зачем z.id пробивать на NULL если мы пробиваем на NULL s.kolvo а они идут одной таблицой? По идее если s.kolvo NULL s.id NULL он уже не покажет....

Я имею в ввиду что если одно из полей пустое то строку mysql уже не выведет т.к. там содержится это условие, так я понимаю?
 

chira

Новичок
А зачем z.id пробивать на NULL если мы пробиваем на NULL s.kolvo а они идут одной таблицой? По идее если s.kolvo NULL s.id NULL он уже не покажет....
где ты увидел z.id IS NULL ?

если работают вложенные селекты, хорошо ...
дальше может встать вопрос оптимизации
 
Сверху