| Индекс материала |
|---|
| Создаем компонент «Моя доска объявлений» - II |
| Учимся делать запросы в БД |
| Реакция на нажатие кнопок |
| Оптимизация кода |
| Редактирование сообщений |
| Все страницы |
Шаг седьмой. Небольшое отступление. Потренируемся создавать запросы в Joomla.
На предыдущем шаге мы уже попробовали создать несколько простых запросов. Сейчас нашей целью будет рассмотреть основные возможности языка SQL. Подробно описывать теорию я не буду - этого материала полно в сети, написана уйма книг. Поэтому буду упоминать определенную возможность и иллюстрировать её на примере. Примеры будем опробовать, так же как и в шестом шаге – вставляем код в место, где описывается реакция на нажатие подпункта меню Наша доска -> Просмотр и удаление объявлений.
Итак начнем.
SQL запросы на выборку данных:
1. SELECT * FROM <Имя таблицы>
SELECT * FROM `#__users` -используя, описанные в предыдущем шаге методы класса database выполните запрос.
$query = 'SELECT * FROM `#__users`'; $database->setQuery($query); $result = $database->loadResultArray(3); foreach ($result as $row) { echo($row."<br>"); }
Отобразит список е-мэйлов зарегистрированных в CMS пользователей. Звездочка в запросе означает, что база данных вернет значения всех полей, которыми обладает данная таблица. Если значения каких-то полей не нужны лучше использовать следующий вид запроса.
2. SELECT <Имя поля1>, <Имя поля2>, …, <Имя поляN> FROM <Имя таблицы>
SELECT `id`, `name`, `username` FROM `#__users`
$query = 'SELECT `id`, `name`, `username` FROM `#__users`'; $database->setQuery($query); $result = $database-> loadAssocList(); foreach ($result as $row) { echo($row['id'].' - '.$row['name'].' - '.$row['username']."<br>"); }
Отображает список, состоящий и идентификатора, имени и логина пользователей, зарегистрированных в системе.
3. SELECT * FROM `Имя таблицы` WHERE `Имя поля` < <Параметр>
SELECT * FROM `Имя таблицы` WHERE `Имя поля` = <Параметр>
SELECT * FROM `Имя таблицы` WHERE `Имя поля` > <Параметр>
SELECT * FROM `#__users` WHERE `id`<69
$query = 'SELECT * FROM `#__users` WHERE `id`<69'; $database->setQuery($query); $result = $database-> loadAssocList(); foreach ($result as $row) { echo($row['id'].' - '.$row['name'].' - '.$row['username']."<br>"); }
Отображает данные только тех пользователей, id которых меньше 69. За ключевым словом WHERE идет условие отбора записей. Условие может быть как простым (в прмере), так и сложным.((Имя поля1 < 1) AND (Имя поля2 > 2)).
4. SELECT <Имя таблицы1>.<Имя поля3>, <Имя таблицы2>.<Имя поля4>
FROM <Имя таблицы1>,<Имя таблицы2>
WHERE <Имя таблицы1>.<Имя поля1>=<Имя таблицы2>.<Имя поля2>
SELECT `#__content`.`title`, `#__users`.`id` FROM `#__users`, `#__content`
WHERE `#__users`.`id`= `#__content`.`created_by`
$query = 'SELECT `#__content`.`title`, `#__users`.`id` FROM `#__users`, `#__content` WHERE `#__users`.`id`= `#__content`.`created_by`'; $database->setQuery($query); $result = $database-> loadAssocList();foreach ($result as $row) { echo($row['id'].'-'.$row['title']."<br>"); }
Отображает список заголовков статей, и идентификатор пользователя, который их создал.
5. SELECT * FROM <Имя таблицы> LIMIT <целое неотрицательное число>
SELECT * FROM `#__content` LIMIT 5
$query = 'SELECT * FROM `#__content` LIMIT 5'; $database->setQuery($query); $result = $database-> loadAssocList(); foreach ($result as $row) { echo($row['title']."<br>"); }
Отобразит значения поля title первых пяти записей таблицы #__content
6. SELECT * FROM <Имя таблицы>
LIMIT <целое неотрицательное число1>,<целое неотрицательное число2>
SELECT * FROM `#__content` LIMIT 2, 5
$query = 'SELECT * FROM `#__content` LIMIT 2, 5'; $database->setQuery($query); $result = $database-> loadAssocList(); foreach ($result as $row) { echo($row['title']."<br>"); }
Отобразит значения поля title 5 записей из таблицы #__content, начиная с 2 (Нумеруются записи с нуля)
7. SELECT * FROM <Имя таблицы> ORDER BY <Имя поля>
SELECT * FROM `#__content` ORFDER BY `modified`
$query = 'SELECT * FROM `#__content` ORDER BY `modified`'; $database->setQuery($query); $result = $database-> loadAssocList(); foreach ($result as $row) { echo($row['modified'].' - '.$row['title']."<br>"); }
Выводятся поля значения полей modified и title всех записей таблицы #__content. Сортировка при выводе идет по полю modified.
SQL запросы на создание, удаление и редактирование таблиц.
1. CREATE TABLE <Имя таблицы> [(параметры)]
$query = 'CREATE TABLE `test` ( `id_test` INT NOT NULL , `test` TEXT NOT NULL , `description` TEXT NOT NULL , PRIMARY KEY ( `id_test` ) );'; $database->setQuery($query); if ($database->query()){echo('Успешно<span>');} else {echo('НЕУспешно');} </span>
Создает таблицу в текущей базе данных с полями id_test (целочисленное, не нуль), test, description (текстовые). Поле id_test – первичный ключ. (Если запрос выполнится, то будет выведена надпись Успешно, Неуспешно в обратном случае.)
2. ALTER TABLE `test` <параметр>
Основные значения параметра приведены в таблице:
|
ADD <Имя поля1> <Тип поля> [FIRST | AFTER <Имя поля2>] |
Добавление нового поля в таблицу Конструкция FIRST добавляет новое поле перед столбцом <Имя поля2>. Конструкция AFTER добавляет поле после поля <Имя поля2>. |
|
ADD INDEX [<Имя индекса>] (<Имя поля1>, …) |
Добавление индекса для поля <Имя поля1>. Если имя индекса не указано, то ему присваивается имя совпадающее с именем поля. |
|
ADD PRIMARY KEY (<Имя поля1>, …) |
Делает поле <Имя поля1> первичным ключом таблицы. |
|
CHANGE <Старое имя поля> <Новое имя поля> <Тип поля> |
Изменение поля <Старое имя поля> на поле <Новое имя поля> с типом <Тип поля> |
|
DROP <Имя поля> |
Удаление поля |
|
DROP PRIMARY KEY |
Удаление первичного ключа таблицы |
|
DROP INDEX <Имя индекса> |
Удаление индекса |
Например отредактируем таблицу test, созданную ранее. Удалим у неё поле description
$query = 'ALTER TABLE `test` DROP `description`'; $database->setQuery($query); if ($database->query()){echo('Успешно<span>');} else {echo('</span>НЕУспешно<span>');} </span>
3. DROP TABLE <Имя таблицы>
<i>$query = 'DROP TABLE `test`'; $database->setQuery($query); if ($database->query()){echo('Успешно<span>');} else {echo('</span>НЕУспешно<span>');} </span></i>
Удаление таблицы test.
SQL запросы на вставку, редактирование и удаление данных в таблицах.
1. INSERT INTO <Имя таблицы> VALUES (<Значение1>, …)
<i>$query = 'INSERT INTO `mdo_message` VALUES (1,"text", 1,1,1)'; $database->setQuery($query); if ($database->query()){echo('Успешно');} else {echo('НЕУспешно');} </i>
2. INSERT INTO <Имя таблицы> (<Имя поля1>, …) VALUES (<Значение1>, …)
<i>$query = 'INSERT INTO `mdo_message` (`message`) VALUES ("text")'; $database->setQuery($query); if ($database->query()){echo('Успешно');} else {echo('НЕУспешно');} </i>
Вставляет запись в таблицу mdo_message. Значения всех полей кроме message устанавливаются по умолчанию.
3. DELETE FROM <Имя таблицы> WHERE <Усвловие>
<i>$query = 'DELETE FROM `mdo_message` WHERE `id_message`<1000'; $database->setQuery($query); if ($database->query()){echo('Успешно');} else {echo('НЕУспешно');} </i>
Из таблицы mdo_message будут удалены все записи у которых значение поля id_message меньше 1000.
Итак на этом шаге мы рассмотрели основные виды SQL запросов. Рассмотрели несколько примеров использования их в Joomla. На следующем шаге мы опишем разработку реакции на нажатие подпункта меню Наша доска->Просмотр и удаление объявлений.
| < Предыдущая | Следующая > |
|---|
Комментарии
Коммент от
Июл 11, 2009Комментатор
Alika- Создание пустых файлов
- Редактирование файла myboard.xml
- Панель управления компонентом
- Все страницы
Не, ну я так не играю
система ругается и говорит, что нету-ть продолжения у статей. Может лучшн не разбивать их на страницы, а выложить просто разными частями?
Коммент от
Июл 12, 2009Комментатор
Aleks_El_DiaКоммент от
Июл 12, 2009Комментатор
AlikaRSS лента комментариев этой записи