0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 846 Просмотров
*

voron121

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

имеется 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

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

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

voron121

  • Захожу иногда
  • 216
  • 1 / 0
  • Метод тыка и мата помогает в кодинге
Уже сам решил. Чет не подумал про точ то можно сделать 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

  • Живу я здесь
  • 3310
  • 166 / 4
Решил вот так
Бритва оккама.
« Последнее редактирование: 01.11.2016, 17:47:49 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

voron121

  • Захожу иногда
  • 216
  • 1 / 0
  • Метод тыка и мата помогает в кодинге
Бритва окама.

Согласен
*

Mitriy

  • Захожу иногда
  • 60
  • 0 / 0
$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;

Так вот сделал
Код
$query->join('LEFT', '#__clientstarif AS b ON a.tarif_tv = b.id AND a.tarif_inter_tv = c.id)');
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вызов определенной функции модели ajax

Автор Dram

Ответов: 16
Просмотров: 137
Последний ответ 26.11.2020, 17:01:55
от Dram
Размещение 3d-модели на сайте

Автор Михаил ЕН

Ответов: 5
Просмотров: 251
Последний ответ 31.07.2020, 09:41:59
от AlexB
Как выбрать данные по нескольким полям в join с сопоставлением?

Автор natsk2

Ответов: 2
Просмотров: 185
Последний ответ 03.10.2019, 13:52:39
от natsk2
Как в модели получить настройки пункта меню?

Автор Inoken

Ответов: 4
Просмотров: 526
Последний ответ 08.06.2017, 13:09:57
от Inoken
Баннеры в ряд: float:left Проблема

Автор saps70

Ответов: 8
Просмотров: 419
Последний ответ 22.02.2017, 09:43:46
от saps70