Вы здесь: Статьи Статьи по Joomla! Создаем компонент «Моя доска объявлений» - II - Учимся делать запросы в БД

Создаем компонент «Моя доска объявлений» - II - Учимся делать запросы в БД

Индекс материала
Создаем компонент «Моя доска объявлений» - 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
0 ???? Не работают ссылки на следующие части статьи:
- Создание пустых файлов
- Редактирование файла myboard.xml
- Панель управления компонентом
- Все страницы

Не, ну я так не играю :sad:
система ругается и говорит, что нету-ть продолжения у статей. Может лучшн не разбивать их на страницы, а выложить просто разными частями?
Коммент от
Июл 12, 2009
Комментатор
Aleks_El_Dia
0 Починил ссылки. Дело было в одном непроверенном плагине (каюсь, не протестировал перед установкой). Продолжения работают, читайте на здоровье :-)
Коммент от
Июл 12, 2009
Комментатор
Alika
0 Спасибо! Сейчас же все и прочту :-)

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

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

Популярные файлы

1.
Компонент Миграции с Joomla! 1.0.x на Joomla! 1.5.x
2108
2.
Хак постраничной навигации сайта на CMS Joomla!
883
3.
Дополнительное изменяемое поле "Телефон"
514

Последние комментарии

  • повторюсь - очень очень надо для 1.5 )) Ну и спаси... Подробнее..
    От Илюха
  • Так введите это имя и пароль/мыло админа и заканч... Подробнее..
    От Aleks_El_Dia
  • делал, делал, миграция прошла успешно, жму далее -... Подробнее..
    От Вася