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

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

Выборка из базы ->where($db->quoteName + OR

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

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

Сообщений: 413


« : 27.04.2017, 00:07:42 »

Доброго!
Господа подмогите с задачкой, не могу понять как сделать следующие:

Данно: $uid

                        $db = JFactory::getDbo();
                        $query = $db->getQuery(true);
                        $query
                            ->select($db->quoteName(array('id', 'images', 'created_by', 'title', 'catid')))
                               ->from($db->quoteName('#__content'))
                            ->where($db->quoteName('created_by'). ' = ' . (int) $uid)          // Выбираем по id создателя
                            ->where($db->quoteName('catid'). ' = ' . (int) 72)                    // Далее выбираем в категории с catid = 72;
                            ->order('id DESC');
 
                        $db->setQuery($query);
                        $result2 = $db->loadObjectList();

Все бы хорошо Но
          ->where($db->quoteName('catid'). ' = ' . (int) 72)                    // Далее выбираем в категории с catid = 72;

А мне нужно выбрать из catid 72 и catid 69 одним запросом хочется.

Как тут применить оператор OR - Не выходит.

Свои изречения не выкладываю, дабы не устраивать цирк.

Спасибо.
Записан
icom
Живу я здесь
******

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

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


« Ответ #1 : 27.04.2017, 00:13:04 »

 ->where($db->quoteName('catid'). ' IN (72, 69)')
Записан
pavelrer
Завсегдатай
*****

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

Сообщений: 413


« Ответ #2 : 27.04.2017, 00:22:37 »

Спасибо огромное! Пошел портянки коротить.

Подскажите пожалуйста еще такой вопрос.
Зная id материала можно из баз тиснуть все.
Но мне нужна ссылка на материал зная id, catid и.т.д

Как я понимаю вот оно:

JHtml::_('link', JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language)), htmlspecialchars($article->title, ENT_COMPAT, 'UTF-8'));

Где почитать, чтобы разобраться, что-то не нагуглил.

Спасибо!
Записан
icom
Живу я здесь
******

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

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


« Ответ #3 : 27.04.2017, 19:10:13 »

Цитировать
JHtml::_('link', JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language)), htmlspecialchars($article->title, ENT_COMPAT, 'UTF-8'));
да, так, но перед этим еще нужно
JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php');
Записан
pavelrer
Завсегдатай
*****

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

Сообщений: 413


« Ответ #4 : 27.04.2017, 21:00:34 »

Спасибо, разобрался.
Записан
pavelrer
Завсегдатай
*****

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

Сообщений: 413


« Ответ #5 : 27.04.2017, 23:13:47 »

Все же еще вопросик родился.

К той же задачи, выбрать только 3 шт.

Поменял на такое.

                                     $db->setQuery($query,1,3);

Но мне нужно выбрать 3 не с начало таблицы т.е с записи 1
А с конца таблицы двигаясь от последнее записи к первой.

Попробовал на шару так
                                     $db->setQuery($query,-1,3);
и так
                                     $db->setQuery($query,0,3);
Не получилось.

Как можно сделать?
Спасибо.
Записан
robert
Профи
********

Репутация: +385/-15
Offline Offline

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


« Ответ #6 : 27.04.2017, 23:43:57 »

Код
$db->setQuery($query, 0, 3);
Должно работать, ведь
                            ->order('id DESC');
уже стоит.
Записан
pavelrer
Завсегдатай
*****

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

Сообщений: 413


« Ответ #7 : 28.04.2017, 00:08:04 »

Да все стоит.
С единичкой работает но, вот что не смог понять.

Вот что происходит.
Если мы говорим выводить один материал.

               $db->setQuery($query,0,1);
Выбирает с конца

Все отлично

               $db->setQuery($query,1,1);

Выбирает с начало но выбирает правильно тоько если находит больше одного совпадения.
Т.е я ищу материал по вышеуказанным условиям, если находиться материалов больше чем один то все путем, если один то не выводит в массив ничего.

Более того:
Если напишим так
               $db->setQuery($query,0,3);
или так
               $db->setQuery($query,1,3);

Все вроде и ничего, но как я понимаю в первом случаи материалы в массиви должны стоять так,

материал 1, материал 2, материал 3

А вот во втором случаи

материал 3, материал 2, материал 1

Но этого не происходит

В обоих случаях порядок такой

материал 1, материал 2, материал 3

Не понимая что-то я

Вот код

               $db = JFactory::getDbo();
               $query = $db->getQuery(true);
               $query
                   ->select($db->quoteName(array('id', 'images', 'created_by', 'title', 'catid', 'introtext')))
                      ->from($db->quoteName('#__content'))
                   ->where($db->quoteName('created_by'). ' = ' . (int) $uid)

                                            ->where($db->quoteName('catid'). ' IN (70, 72)')

                   ->order('id DESC');
 
               $db->setQuery($query,0,1);
               $result2 = $db->loadObjectList();

Спасибо.
Записан
robert
Профи
********

Репутация: +385/-15
Offline Offline

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


« Ответ #8 : 28.04.2017, 00:37:22 »

Зачем писать так много и сумбурно?
2-й и 3-й аргументы - это OFFSET И LIMIT.
Код
$query->order('id DESC');
$db->setQuery($query, 0, 3);
 
выводит "материал с ID=10, материал с ID=9, материал с ID=8".
Код
$query->order('id DESC');
$db->setQuery($query, 1, 3);
 
выводит "материал с ID=9, материал с ID=8, материал с ID=7".
« Последнее редактирование: 28.04.2017, 00:44:24 от robert » Записан
pavelrer
Завсегдатай
*****

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

Сообщений: 413


« Ответ #9 : 28.04.2017, 01:26:45 »

Спасибо, разобрался.

OFFSET И LIMIT нормально все работают, я просто к тестовой базе подключен а phpMyAdmin нормальной базы открыт.

Вот дурик  Grin
Записан
Страниц: [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