Выборка из таблиц бызы данных делается с помощью цепочек запросов (query chaining) или с помощью строки запроса.
Сначала получаем объект для работы с базой
$db = JFactory::getDBO();
И затем, создаем объект запросов
$query = $db->getQuery(true);
getQuery имеет один параметр, по умолчанию, $new=false. Если задаем true, то получаем новый объект запроса.
Формировать запрос можно или с помощью цепочек, вот так
$query ->select() ->from() ->where() ->order();
либо по отдельности
$query->select(); $query->from(); $query->where(); $query->order();
Еще методы объекта запроса
$query->from(); $query->join(); $query->setLimit('10');
Это еще не все методы объекта запросов, более полный список можно посмотреть здесь >> https://api.joomla.org/cms-3/classes/JDatabaseQuery.html
Для формирования запроса удобно использовать вспомогательные функции для добавления кавычек и экранирования, например
для добавления обратных кавычек к полям таблицы и именам таблиц и баз
$db->quoteName('#__content')
и для обрамления текста в кавычки и экранирования кавычек в тексте
$db->quote($value)
quoteName и quote могут принимать в качестве аргумента как строку так и массив и возвращают соответственно строку или массив
API JDatabase >> https://api.joomla.org/cms-2.5/classes/JDatabase.html
Пример запроса к одной таблице
$query ->select($db->quoteName(array('user_id', 'profile_key', 'profile_value', 'ordering'))) ->from($db->quoteName('#__user_profiles')) ->setLimit('10');
Пример запроса к нескольким таблицам
// Get a db connection. $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); // Select all articles for users who have a username which starts with 'a'. // Order it by the created date. // Note by putting 'a' as a second parameter will generate `#__content` AS `a` $query ->select($db->quoteName(array('a.*', 'b.username', 'b.name'))) ->from($db->quoteName('#__content', 'a')) ->join('INNER', $db->quoteName('#__users', 'b') . ' ON (' . $db->quoteName('a.created_by') . ' = ' . $db->quoteName('b.id') . ')') ->where($db->quoteName('b.username') . ' LIKE \'a%\'') ->order($db->quoteName('a.created') . ' DESC'); // Reset the query using our newly populated query object. $db->setQuery($query); // Load the results as a list of stdClass objects (see later for more options on retrieving data). $results = $db->loadObjectList();
loadObjectList - результат запроса - массив объектов,
Объект JDatabase содержит и другие интересные методы для получения результата запроса >> JDatabase
Пример запроса к больше чем двум таблицам
$query ->select($db->quoteName(array('a.*', 'b.username', 'b.name', 'c.*', 'd.*'))) ->from($db->quoteName('#__content', 'a')) ->join('INNER', $db->quoteName('#__users', 'b') . ' ON (' . $db->quoteName('a.created_by') . ' = ' . $db->quoteName('b.id') . ')') ->join('LEFT', $db->quoteName('#__user_profiles', 'c') . ' ON (' . $db->quoteName('b.id') . ' = ' . $db->quoteName('c.user_id') . ')') ->join('RIGHT', $db->quoteName('#__categories', 'd') . ' ON (' . $db->quoteName('a.catid') . ' = ' . $db->quoteName('d.id') . ')') ->where($db->quoteName('b.username') . ' LIKE \'a%\'') ->order($db->quoteName('a.created') . ' DESC');
Вот достаточно подробная статья о том как делается выборка из одной или нескольких таблиц в Joomla >> https://docs.joomla.org/Selecting_data_using_JDatabase