Запрос из трех таблиц

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

Mick_20

  • Завсегдатай
  • *****
  • 657
  • 3
  • Кручу мучу... заработать хочу.
Запрос из трех таблиц
« : 17.04.2014, 14:53:07 »
Как сделать запрос из 3х таблиц?

Пока что у меня запрос из двух таблиц и подзапрос из третьей:

Код: php
$query = $db->getQuery(true);
$query->select('m.user_id,m.about,u.name')
->from('#__portfolio_members AS m')
->leftJoin('#__users AS u ON m.user_id = u.id');
$p_list = $db->setQuery($query)->loadObjectList();

foreach ($p_list as $var)
{
//достаем фото пользователя
$query = $db->getQuery(true);
$query->select('avatar');
$query->from('#__community_users');
$query->where("userid = {$var->user_id}");
$db->setQuery($query) or die("запрос1 не сработал");
$avatar = $db->loadResult();
}

Необходимо все переменные иметь в одном массиве.

*

icom

  • Живу я здесь
  • ******
  • 804
  • 182
Re: Запрос из трех таблиц
« Ответ #1 : 17.04.2014, 15:31:26 »
вроде так
Код: php
$query = $db->getQuery(true);
$query->select('m.user_id,m.about,u.name,c.avatar')
->from('#__portfolio_members AS m')
->leftJoin('#__users AS u ON m.user_id = u.id');
->leftJoin('#__community_users AS c ON m.user_id = c.userid');
$p_list = $db->setQuery($query)->loadObjectList();

*

Mick_20

  • Завсегдатай
  • *****
  • 657
  • 3
  • Кручу мучу... заработать хочу.
Re: Запрос из трех таблиц
« Ответ #2 : 17.04.2014, 19:36:21 »
ого как просто оказалось))) а можно так из 10 таблиц тянуть данные?

*

Shustry

  • Группа развития
  • *****
  • 6426
  • 733
  • Рисую дизайны
Re: Запрос из трех таблиц
« Ответ #3 : 17.04.2014, 20:03:14 »
Можно. Но насколько такая задача востребована? Я больше, чем из трёх-четырёх ни разу не встречал ситуации, где потребовалось бы.
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Re: Запрос из трех таблиц
« Ответ #4 : 17.04.2014, 20:44:04 »
Можно. Но насколько такая задача востребована? Я больше, чем из трёх-четырёх ни разу не встречал ситуации, где потребовалось бы.
Тогда никогда не открывайте битрикс http://govnokod.ru/5619
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

Shustry

  • Группа развития
  • *****
  • 6426
  • 733
  • Рисую дизайны
Re: Запрос из трех таблиц
« Ответ #5 : 17.04.2014, 20:47:12 »
Тогда никогда не открывайте битрикс http://govnokod.ru/5619
Красивый код. :)
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!

*

Mick_20

  • Завсегдатай
  • *****
  • 657
  • 3
  • Кручу мучу... заработать хочу.
Re: Запрос из трех таблиц
« Ответ #6 : 18.04.2014, 11:12:27 »
А скажите как в этот запрос добавить
Код: php
$query->limit('0,40');
хочу постраничную навигацию сделать...

« Последнее редактирование: 18.04.2014, 12:43:58 от Mick_20 »

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Re: Запрос из трех таблиц
« Ответ #7 : 18.04.2014, 18:58:09 »
$list = $db->setQuery($query, 0, 40)->loadObjectList();
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

Hishchnik

  • Давно я тут
  • ****
  • 254
  • 18
  • ©
Re: Запрос из трех таблиц
« Ответ #8 : 02.05.2014, 23:34:59 »
у меня вопрос по теме, но для 2-х таблиц:    
выбираю определенные поля из таблицы item, нужно посчитать, количество комментариев к данной теме:
Код: php
$query
->select(array('a.id', 'a.name', 'a.created', 'a.title', 'a.text', 'ROUND(a.rating_sum / a.rating_count, 2) AS rating_value', 'a.rating_count', 'a.hits', 'a.catid', 'a.cat_title', 'COUNT(b.itemID) AS count'))
 ->from('#__contents_item AS a')
->join('INNER', '#__contents_comments AS b ON (a.id = b.itemID)')
->where('a.published=1')
->where('a.catid LIKE '.$this->input->getInt('id'));

вопрос в том, что "COUNT(b.itemID) AS count" выдает общее количество комментариев, а не количество комментариев в конкретной теме..... :(

забыл сказать:

при 'COUNT(b.itemID) AS count' выводит count=4(хотя к данной статье всего 2 коммента) и не циклирует(должно вывести 2 статьи):
Спойлер
[свернуть]

при 'b.itemID' выводит count=2(по 2 коммента на статью) но циклирует 2 раза (должно вывести 2 статьи вместо 4-х):
Спойлер
[свернуть]

Или придется всё же делать еще 1 запрос к базе?
« Последнее редактирование: 02.05.2014, 23:40:22 от Hishchnik »
1. Помог? Благодарность выражается кнопочкой "+" ;)
2. Остановите землю я сойду!
3.

*

zomby6888

  • Живу я здесь
  • ******
  • 1484
  • 167
Re: Запрос из трех таблиц
« Ответ #9 : 02.05.2014, 23:42:25 »
не знаю что вы подразумеваете под "циклированием" но чисто эмперически предполагаю что вам нужна группировка
Код: php
$query
->select(array('a.id', 'a.name', 'a.created', 'a.title', 'a.text', 'ROUND(a.rating_sum / a.rating_count, 2) AS rating_value', 'a.rating_count', 'a.hits', 'a.catid', 'a.cat_title', 'COUNT(*) AS count'))
 ->from('#__contents_item AS a')
->join('INNER', '#__contents_comments AS b ON (a.id = b.itemID)')
->where('a.published=1')
->where('a.catid LIKE '.$this->input->getInt('id'))
->group('a.id');
я прав, нет?
интернет-блог: http://websiteprog.ru

*

Hishchnik

  • Давно я тут
  • ****
  • 254
  • 18
  • ©
Re: Запрос из трех таблиц
« Ответ #10 : 03.05.2014, 00:27:45 »
...
такой запрос, и всего-то группирование подвело((((
итог, Вы правы.  :D
1. Помог? Благодарность выражается кнопочкой "+" ;)
2. Остановите землю я сойду!
3.

*

Mick_20

  • Завсегдатай
  • *****
  • 657
  • 3
  • Кручу мучу... заработать хочу.
Re: Запрос из трех таблиц
« Ответ #11 : 23.11.2016, 12:49:26 »
Подскажите. Вылетает ошибка 500 на данный запрос:

Код: php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('u.user_id, u.content_id, u.section_pk, u.setevoy_proekt, u.konkurs, u.date, r.region, a.name')
 ->from('#__planeta_pk_users AS u')
 ->leftJoin('#__planeta_regions AS r ON r.id = u.region');
 ->leftJoin('#__users AS a ON a.id = u.user_id');

А именно на последнюю строчку LeftJoin.

В чем мб ошибка?

Блиин =)  Рано закрыл запрос. Убрал ; и все заработало.
« Последнее редактирование: 23.11.2016, 12:55:49 от Mick_20 »

*

Mick_20

  • Завсегдатай
  • *****
  • 657
  • 3
  • Кручу мучу... заработать хочу.
Re: Запрос из трех таблиц
« Ответ #12 : 23.11.2016, 13:00:13 »
Скажите а как в рамках одного запроса получить из одной таблицы две записи?

Пытался так но выводится только одна запись:

Код: php
...
$query->select('..., s.title, k.title')
->from('#__users AS u')
...
->leftJoin('#__content AS s ON s.id = u.proekt')
->leftJoin('#__content AS k ON k.id = u.konkurs')
...
echo $user->title;

*

SmokerMan

  • Профи
  • ********
  • 5329
  • 689
Re: Запрос из трех таблиц
« Ответ #13 : 23.11.2016, 13:33:59 »
Код
$query->select('..., s.title AS title1, k.title AS title2')
echo $user->title1;
echo $user->title2;

*

Mick_20

  • Завсегдатай
  • *****
  • 657
  • 3
  • Кручу мучу... заработать хочу.
Re: Запрос из трех таблиц
« Ответ #14 : 23.11.2016, 14:16:17 »
Код
$query->select('..., s.title AS title1, k.title AS title2')
echo $user->title1;
echo $user->title2;

Благодарю. То, что надо.