Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 180 Просмотров
*

voron121

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

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

Код: php
	$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 ? То есть что то вроде этого :

Код: php

$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;
(пример не рабочий есесн, иначе не писал бы в топик :( )

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

Septdir

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

А вообще имхо не проще ли юзать еще одну таблицу id полльховтеля | id траифа . И получать их отдельно.  А то будет потом понадобиться 3-4 категория и переделывай по новой весь запрос. Хотя все зависит от ситуации.
« Последнее редактирование: 01.11.2016, 19:31:08 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen
*

voron121

  • Давно я тут
  • ****
  • 222
  • 1
  • Метод тыка и мата помогает в кодинге
Уже сам решил. Чет не подумал про точ то можно сделать 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. Решил вот так

Код: php
	$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

  • Практически профи
  • *******
  • 2165
  • 109
  • JoomlaZen
Решил вот так
Бритва оккама.
« Последнее редактирование: 01.11.2016, 19:47:49 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen
*

voron121

  • Давно я тут
  • ****
  • 222
  • 1
  • Метод тыка и мата помогает в кодинге
Бритва окама.

Согласен