Форум русской поддержки Joomla!® CMS
09.12.2016, 07:59:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

LEFT JOIN в модели с выборкой по 2-ум условиям

 (Прочитано 54 раз)
0 Пользователей и 1 Гость смотрят эту тему.
voron121
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 174


Метод тыка и мата помогает в кодинге


« : 01.11.2016, 17:12:20 »

Доброго времени суток уважаемые формучане. Челом бью, прошу натолкнуть на путь истинный. Проблема :

имеется 2 таблицы. В первой таблице хранятся записи с тарифными планами (id name price). Во второй таблице хранится список пользователей. При редактировании записи с пользователем  ему можно выбрать 2 тарифа (для 2-ух разных услуг. К примеру тариф на Интернет и тариф на Телевидение.) Мне необходимо в компоненте (компонент само писный) в модели вывести список пользователей и в колонке тариф указать наименование их тарифного плана. Для реализации в модели есть вот такой запрос :

Код
	$db = JFactory::getDbo();
$query = $db->getQuery(true);
       $query->select('a.* , b.id AS tarif_id, b.name AS tarif_name');
       $query->from('`#__clients` AS a');
       $query->join('LEFT', '#__clientstarif AS b ON (a.tarif_tv = b.id)');
       $query->order('a.id DESC');
 
return $query;
 

На странице со списком абонентов переменная $row->tarif_name; выводит наименование тарифного плана для 1 из типов тарифа. Допустим это интернет. НО мне так же нужно вывести наименование тарифного плана для ТВ. В БД в таблице с пользователями есть 2 столбца в которых хранится id выбранного тарифного плана для пользователя. И вот в чем проблема : хоть убейте не могу понять как мне при таком условии или при подобном вывести  в результате работы запроса наименование для второго тарифного пана. То есть в строке $query->select('a.* , b.id AS tarif_id, b.name AS tarif_name'); я указываю что есть 2 таблицы и будет некий псевдоним при выборке. Но как мне указать что будет 2 таблицы а вот псевдонимов будет  3 ? То есть что то вроде этого :

Код
 
$db = JFactory::getDbo();
$query = $db->getQuery(true);
       $query->select('a.* , b.id AS tarif_id, b.name AS tarif_name, с.id AS tarif_inter_id, c.name AS tarif_inter_name');
       $query->from('`#__clients` AS a');
       $query->join('LEFT', '#__clientstarif AS b ON (a.tarif_tv = b.id AND a.tarif_inter_tv = c.id)');
       $query->order('a.id DESC');
 
return $query;
 
(пример не рабочий есесн, иначе не писал бы в топик Sad )

В общем подскажите кто знает - сам зашел в ступор. С Джоинами немного напряженные отношения Sad
Записан
Septdir
Живу я здесь
******

Репутация: +36/-3
Offline Offline

Пол: Мужской
Сообщений: 841


Skype: septdir


« Ответ #1 : 01.11.2016, 18:27:46 »

Не фига не понял в каком виде это должно прийти да и структуры таблицы бы видеть полностью.

А вообще имхо не проще ли юзать еще одну таблицу id полльховтеля | id траифа . И получать их отдельно.  А то будет потом понадобиться 3-4 категория и переделывай по новой весь запрос. Хотя все зависит от ситуации.
« Последнее редактирование: 01.11.2016, 18:31:08 от Septdir » Записан
voron121
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 174


Метод тыка и мата помогает в кодинге


« Ответ #2 : 01.11.2016, 18:38:25 »

Уже сам решил. Чет не подумал про точ то можно сделать 2 LEFT JOIN к  1 таблице.

Суть вот в чем :

tarif_tnle

id     name    price

user_table

id name tarif_id1   tarif_id_2


И мне нужно было на странице с пользователями отобразить список пользователей и наименование их тарифов. Т.к тарифы в таблице tarif_table то я делал туда запрос с LEFT JOIN . Застопорился я в тот момент когда получил имя для tarim_id_1 и мне нужно было получить имя для tarif_id_2. Решил вот так

Код
	$db = JFactory::getDbo();
$query = $db->getQuery(true);
       $query->select('a.* , b.id AS tarif_id, b.name AS tarif_name, c.id AS tarif_dom_id, c.name AS tarif_dom_name');
       $query->from('`#__clients` AS a');
       $query->join('LEFT', '#__clientstarif AS b ON (a.tarif_tv = b.id)');
       $query->join('LEFT', '#__clientstarif AS c ON (a.tarif_domophone = c.id)');
 
       $query->order('a.id DESC');
return $query;
 
Записан
Septdir
Живу я здесь
******

Репутация: +36/-3
Offline Offline

Пол: Мужской
Сообщений: 841


Skype: septdir


« Ответ #3 : 01.11.2016, 18:39:48 »

Решил вот так
Бритва оккама.
« Последнее редактирование: 01.11.2016, 18:47:49 от Septdir » Записан
voron121
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 174


Метод тыка и мата помогает в кодинге


« Ответ #4 : 01.11.2016, 18:44:15 »

Бритва окама.

Согласен
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet