RSS   Twitter   Copiny   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

 

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

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

SELECT * FROM jos_users

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

SELECT * FROM jos_content
WHERE state = '1' 

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

SELECT * FROM jos_users
WHERE username <> 'admin'

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

SELECT name, email FROM jos_users

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

SELECT title FROM jos_sections
WHERE published = 1

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


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

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

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

или по убыванию id

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

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

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


Ограничение вывода

Выведем 10 строк из таблицы jos_content

SELECT * FROM jos_content
LIMIT 0, 10

Для того чтобы чтобы выбрать начиная с 5 записи следующие 20, пишем следующее

SELECT * FROM jos_content
LIMIT 5, 20


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

MySQL поддерживает логические операторы, например выберем все материалы, старше 20 сентября 2008 года:

SELECT * FROM jos_content
WHERE state = '1'
AND created < '2008-09-20 00:00:00'

Усложним выбор несколькими условиями, кол-во просмотров не более чем 2000 и не меньше 1000:

SELECT * FROM jos_content
WHERE state = '1'
AND hits > '1000'
AND hits < '2000'
AND created < '2008-09-20 00:00:00'

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

SELECT * FROM jos_content
WHERE (sectionid = '5' OR sectionid = '6')
AND created < '2009-08-20 00:00:00'
ORDER BY created DESC
LIMIT 0, 10


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

До этого мы оперировали только с числовыми типами данных, теперь попробуем с текстом. Из всех пользователей найдем только тех, имя которых начинаются на "a".

SELECT username
FROM jos_users
WHERE username LIKE 'a%'

Или заканчиваются на "о"

SELECT id,email,usertype
FROM jos_users
WHERE username LIKE '%о' 


Функции MySQL

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

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

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

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


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

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

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


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

Применяются объединения когда нужно использовать данные более чем из одной таблицы. Выборка имени материала с категорией, таблицы объединены по соответствующим 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

Смотрите также:
Комментарии (3) Добавить комментарий
  • ArtIrinka
    ArtIrinka
    06 Февраля 2012, 18:18
     ↑  +1  ↓     ответ

    У меня при запросе SELECT * FROM #__yy

    выводится почему-то только первый id (хотя должны выводиться все значения таблицы)

    сама функция выглядит так:

    $db =& JFactory::getDBO();

    $query = 'SELECT * FROM #__yy';

    $db->setQuery( $query );

    $xx = $db->loadResult();

    return $xx;

    Может здесь нужно цикл добавить?

    • Aventurier
      Aventurier
      08 Марта 2012, 05:55
       ↑  +1  ↓     ответ

      Вам надо было в предпоследней строке вместо

      $xx = $db->loadResult();

      вывести

      $xx = $db->loadObjectList();

  • ArtIrinka
    ArtIrinka
    13 Марта 2012, 12:57
     ↑  0  ↓     ответ

    Спасибо большое

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.