Примеры MySQL запросов для Joomla

Примеры MySQL запросов для Joomla

Здравствуйте дорогие читатели блога. Сегодня мы рассмотрим примеры SQL запросов для Joomla которые используются часто.

Выбрать всех пользователей:

SELECT * FROM jos_users

Показать все неопубликованные статьи:

SELECT * FROM jos_content WHERE state = '0'

Показать всех пользователей кроме "admin":

SELECT * FROM jos_users WHERE username != 'admin'

В предыдущих выражениях знак звездочки (*) обозначает показывать все столбцы. Теперь если мы хотим показать только email пользователей, запрос будет выглядеть по другому:

SELECT name, email FROM jos_users

Показать заголовки только опубликованных разделов:

SELECT title FROM jos_sections WHERE published = 1

Указывать (*) очень удобно. На практике запросы в базу данных начинают использовать больше памяти в следствие чего производительность начнет падать. Выбирайте только нужные данные, это упростит вам жизнь.

Запросы ограничении вывода

Выведем 5 строк из таблицы jos_content кроме первой:

SELECT * FROM jos_content LIMIT 1, 5

Для того чтобы чтобы выбрать первые 15 строка, пишем следующее:

SELECT * FROM jos_contentLIMIT 0, 15

Работа с текстом в MySQL

Из всех пользователей найдем только тех, имя которых начинаются на "О":

SELECT username FROM jos_users WHERE username LIKE 'о%'

Из всех пользователей найдем только тех, имя которых заканчиваются на "с":

SELECT id,email FROM jos_users WHERE username LIKE '%с'

Логические операторы SQL

MySQL поддерживает логические операторы, например выберем все опубликованные материалы которые старше 29 марта 2012 года:

SELECT * FROM jos_content WHERE state = '1'AND created < '2012-03-29 00:00:00'

Усложним выбор несколькими дополнительными условиями, количество просмотров не более чем 3500 и не меньше 2012:

SELECT * FROM jos_content WHERE state = '1'AND hits > '2012' AND hits < '3500' AND created < '2012-03-29 00:00:00'

Можно использовать скобки, чтобы явно указать приоритет среди сравнений:

SELECT * FROM jos_content WHERE (sectionid = '6' OR sectionid = '7') AND created < '2012-03-29 00:00:00' ORDER BY created DESCLIMIT 0, 15

Сортировка данных в MySQL

Для того чтобы выводить данные в определенном порядке используем конструкцию "ORDER BY", например сортировка id по убыванию:

SELECT * FROM jos_content WHERE state ='1' ORDER BY id DESC

Сортировка по возрастанию id:

SELECT * FROM jos_content WHERE state ='1' ORDER BY id ASC

Делаем несколько сортировок (в порядке убывания приоритета):

SELECT * FROM jos_categories ORDER BY published ASC, section ASC, id DESC

Вложенные запросы SQL

Допустим мы хотим использовать в своем запросе поле, которое определено в другой таблице. Например выберем все страницы, которые не выведены на главную:

SELECT id, name FROM jos_content WHERE id NOT IN (SELECT content_id FROM jos_content_frontpage)

Функции MySQL

Набор встроенных в MySQL функций. Названия говорят за себя:

SELECT AVG(hits) FROM jos_content
SELECT MAX(hits) FROM jos_content
SELECT COUNT(*) FROM jos_content
SELECT SUM(hits) FROM jos_content

Функции можно использовать вместе с группировкой. Подсчитаем количество хитов для каждого из раздела, упорядочим по возрастанию

SELECT sectionid, SUM(hits) AS hits. FROM jos_content GROUP BY sectionid ORDER BY hits ASC

Объединения в MySQL

Применяются объединения в MySQK когда нам нужно использовать данные более чем из одной таблицы. Выборка имени материала с категорией, таблицы объединены по соответствующим id. Чтобы избежать двусмысленности мы приписываем названия таблиц к имени поля через точку:

SELECT jos_categories.title, jos_content.title FROM jos_content JOIN jos_categories ON jos_content.catid = jos_categories.id ORDER BY jos_categories.id

Дополнительно используем таблицу с jos_users, чтобы узнать имя автора материала:

SELECT jos_categories.title, jos_content.title, jos_users.username FROM jos_content JOIN jos_categories ON jos_content.catid = jos_categories.id JOIN jos_users ON jos_content.created_by = jos_users.id ORDER BY jos_categories.id

Теперь используем все в одном примере:

SELECT jos_categories.title, jos_content.title, jos_users.username FROM jos_content JOIN jos_categories ON jos_content.catid = jos_categories.id JOIN jos_users ON jos_content.created_by = jos_users.id WHERE jos_content.state = '1' AND jos_content.hits > '10' AND jos_content.id NOT IN (SELECT content_id FROM jos_content_frontpage) ORDER BY jos_categories.id

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

Добавить комментарий


Защитный код
Обновить

MOD_BREADCRUMBS_HERE Главная страницаJoomlaПримеры MySQL запросов для Joomla
?>