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

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

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

 (Прочитано 546 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mick_20
Завсегдатай
*****

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

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


Как бы это заработать деньжат...


« : 17.04.2014, 12:53:07 »

Как сделать запрос из 3х таблиц?

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

Код
$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
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

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


« Ответ #1 : 17.04.2014, 13:31:26 »

вроде так
Код
$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
Завсегдатай
*****

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

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


Как бы это заработать деньжат...


« Ответ #2 : 17.04.2014, 17:36:21 »

ого как просто оказалось))) а можно так из 10 таблиц тянуть данные?
Записан
Shustry
Группа развития
*****

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

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


Рисую дизайны


« Ответ #3 : 17.04.2014, 18:03:14 »

Можно. Но насколько такая задача востребована? Я больше, чем из трёх-четырёх ни разу не встречал ситуации, где потребовалось бы.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #4 : 17.04.2014, 18:44:04 »

Можно. Но насколько такая задача востребована? Я больше, чем из трёх-четырёх ни разу не встречал ситуации, где потребовалось бы.
Тогда никогда не открывайте битрикс http://govnokod.ru/5619
Записан
Shustry
Группа развития
*****

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

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


Рисую дизайны


« Ответ #5 : 17.04.2014, 18:47:12 »

Тогда никогда не открывайте битрикс http://govnokod.ru/5619
Красивый код. Azn
Записан
Mick_20
Завсегдатай
*****

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

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


Как бы это заработать деньжат...


« Ответ #6 : 18.04.2014, 09:12:27 »

А скажите как в этот запрос добавить
Код
$query->limit('0,40');
 
хочу постраничную навигацию сделать...

« Последнее редактирование: 18.04.2014, 10:43:58 от Mick_20 » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #7 : 18.04.2014, 16:58:09 »

$list = $db->setQuery($query, 0, 40)->loadObjectList();
Записан
Hishchnik
Давно я тут
****

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

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


©


« Ответ #8 : 02.05.2014, 21:34:59 »

у меня вопрос по теме, но для 2-х таблиц:    
выбираю определенные поля из таблицы item, нужно посчитать, количество комментариев к данной теме:
Код
$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" выдает общее количество комментариев, а не количество комментариев в конкретной теме..... Sad

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

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

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

Или придется всё же делать еще 1 запрос к базе?
« Последнее редактирование: 02.05.2014, 21:40:22 от Hishchnik » Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #9 : 02.05.2014, 21:42:25 »

не знаю что вы подразумеваете под "циклированием" но чисто эмперически предполагаю что вам нужна группировка
Код
$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');
 
я прав, нет?
Записан
Hishchnik
Давно я тут
****

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

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


©


« Ответ #10 : 02.05.2014, 22:27:45 »

...
такой запрос, и всего-то группирование подвело((((
итог, Вы правы.  Cheesy
Записан
Mick_20
Завсегдатай
*****

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

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


Как бы это заработать деньжат...


« Ответ #11 : 23.11.2016, 11:49:26 »

Подскажите. Вылетает ошибка 500 на данный запрос:

Код
$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, 11:55:49 от Mick_20 » Записан
Mick_20
Завсегдатай
*****

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

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


Как бы это заработать деньжат...


« Ответ #12 : 23.11.2016, 12:00:13 »

Скажите а как в рамках одного запроса получить из одной таблицы две записи?

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

Код
...
$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
Профи
********

Репутация: +692/-25
Online Online

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



« Ответ #13 : 23.11.2016, 12:33:59 »

Код:
$query->select('..., s.title AS title1, k.title AS title2')
echo $user->title1;
echo $user->title2;
Записан
Mick_20
Завсегдатай
*****

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

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


Как бы это заработать деньжат...


« Ответ #14 : 23.11.2016, 13:16:17 »

Код:
$query->select('..., s.title AS title1, k.title AS title2')
echo $user->title1;
echo $user->title2;

Благодарю. То, что надо.
Записан
Страниц: [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