Использование IF условия при LEFT JOIN возможно?

artman

Новичок
Использование IF условия при LEFT JOIN возможно?

Задача присоединить данные из второй таблицы - shop_orders,
но присоединить в зависимости от определенного поля из первой таблицы shop_clients.

Возможно ли такое?

Запрос не работающий:
SELECT *
FROM shop_clients as cl
LEFT JOIN shop_orders as ord
IF (cl.ist='cus', ON (cl.priznak=ord.customerid), ON (cl.priznak=ord.phone))
WHERE cl.fio LIKE '%иван%'
GROUP BY cl.id
 

iceman

говнокодер
artman
для чего тебе это нужно?

у тебя FK для нескольких полей? о_О
 

artman

Новичок
Автор оригинала: *****
if в sql работает с данными, а не с операторами :)))
Да вот жаль, это я понял уже. :) Запрос привел в качестве иллюстрации задачи. :)

Варианты подхода к данному вопросу есть?

Вот может через встроеный запрос попробовать?
 

pilot911

Новичок
в данном случае очевидно, что этот if должен быть в скрипте, который и сформирует запрос
 

artman

Новичок
Автор оригинала: iceman
artman
для чего тебе это нужно?

у тебя FK для нескольких полей? о_О
Дело в том что в первой таблицы хранятся все клиенты, они получаются из тех кто зарегистрирован и тех кто заказывал в магазине без регистрации.
По этому в первой таблице есть поле определяющее откуда был выбран этот пользователь либо из постоянных, либо из временных клиентов.

Во второй таблице заказов есть поле определяющее кто заказал (постоянный пользователь и тогда заполнено это поле)
и поле телефон заполненое если это временный клиент.

А задача поиск например и по фамилии и по заказам (пример: "иванов штаны").

-~{}~ 15.07.09 14:03:

Автор оригинала: iceman
ты не правильно сконструировал таблицы
Я их не конструировал достались в наследство. :)

-~{}~ 15.07.09 14:05:

Автор оригинала: pilot911
в данном случае очевидно, что этот if должен быть в скрипте, который и сформирует запрос
См. пояснение для iceman
 

Фанат

oncle terrible
Команда форума
а почему ордера связаны с клиентами так дебильно-то?
какая разница, какой клиент. почему таблицы не по ид связаны?
 

iceman

говнокодер
artman
и как твоя задача поиска пересекается с этой связью?
 

artman

Новичок
Автор оригинала: *****
а почему ордера связаны с клиентами так дебильно-то?
какая разница, какой клиент. почему таблицы не по ид связаны?
Таблица клиентов вообще была сгенерирована из таблицы ордеров, потому что таблицы клиентов не было изначально, была таблица зарегенных пользователей.
Из таблицы ордеров были выделены строки (которые являются не заказом Sic! а элементом заказа :)) которые были сгрупированы по телефону, получились временные клиенты. А вот зарегенные клиенты связаны как раз по ид с таблицей ордеров.
 

prolis

Новичок
[sql]
SELECT cl.id, cl.fio, if(cl.ist='cus',ord.name, ord2.name) as fld
FROM shop_clients as cl
LEFT JOIN shop_orders as ord cl.priznak=ord.customerid
LEFT JOIN shop_orders as ord2 cl.priznak=ord2.phone
WHERE cl.fio LIKE '%иван%' and (ord.name='штаны' or ord2.name='штаны')
[/sql]
*name = поле с названием заказа
 

artman

Новичок
Автор оригинала: iceman
artman
и как твоя задача поиска пересекается с этой связью?
В таблице клиентов хранится фио, в таблице заказов названия товара...

-~{}~ 15.07.09 15:50:

Автор оригинала: prolis
[sql]
SELECT cl.id, cl.fio, if(cl.ist='cus',ord.name, ord2.name) as fld
FROM shop_clients as cl
LEFT JOIN shop_orders as ord cl.priznak=ord.customerid
LEFT JOIN shop_orders as ord2 cl.priznak=ord2.phone
WHERE cl.fio LIKE '%иван%' and (ord.name='штаны' or ord2.name='штаны')
[/sql]
*name = поле с названием заказа
Попробовал, очень большое время выполнения...
 
Сверху