Меню сайта |
|
|
Наш опрос |
|
| |
Пишем на PHP
Прежде, чем переходить к следующему классу (utils), я предлагаю вам совершить небольшой экскурс в язык запросов SQL. Это необходимо по двум причинам. Во-первых, не хочу, чтобы вы смотрели на SQL-фрагменты последующих скриптов как парнокопытные животные на только что построенное заградительное сооружение. А во-вторых, мне хочется донести до вас красоту этого языка, скрытую в его простоте и "человечности". Что такое база данных? Это хранилище информации. Структурированное хранилище. В базе данных можно хранить любой тип информации: от цифр до видеороликов. А все запросы к базе данных можно разделить на три основные группы:
Создание/изменение структуры БД
Добавление/изменение информации в БД
Получение отчетов/выборок из БД
Как создаются таблицы мы уже видели. На этом этапе я останавливаться не буду, ибо тут ничего интересного нет. Как и стандартного. В разных БД создание таблиц, функций и индексации может производиться по-разному. Это не так важно.
Мы остановимся на двух других группах.
Добавление, изменение, удаление информации производится почти человеческим языком. Поэтому все команды SQL так легко запомнить.
Предположим, у нас есть таблица books (книги), в которой мы храним информацию о своей домашней библиотеке.
Для этого мы создали таблицу books в следующем виде:
create table books(
book_id bigint not null auto_increment primary key,
book_name varchar(100) not null default "",
book_date datetime not null,
book_comm varchar(200) not null default ""
);
где book_id -- порядковый номер книги (создает автоматически, при добавлении новой записи в таблицу, путем прибавления единицы к внутреннему счетчику), book_name -- автор и название книги, book_date -- дата (и время) приобретения книги. А book_comm -- свободный комментарий до двухсот символов. Например, мы можем в это поле записывать имя человека, взявшего у нас книгу, или интересную подробность, связанную с ее приобретением.
Давайте перейдем непосредственно к добавлению информации.
По-хорошему, надо было создать как минимум две таблицы: для книг и для авторов. И связать их внешним ключом для целостности. Но сейчас наша задача состоит в ином, поэтому простите мне мой топорный подход.
Нам надо добавить в нашу электронную библиотеку книгу "Алексей Толстой. 'Золотой ключик или приключения Буратино'".
Как бы мы это сделали, если бы база данных управлялась человеческим голосом?
Наверное, что-то вроде: "добавить в таблицу КНИГИ название и дату покупки: А. Толстой. 'Золотой ключик...', 27-е августа 2001 года".
Вот мы так и запишем, а SQL с удовольствием нас поймет. Только по-английски.
insert into books(book_name, book_date) values("А.Толстой. 'Золотой ключик или приключения Буратино'","2001-08-27 00:00:00");
Вот так. Почти по-человечески.
Следующей книгой для контраста добавим "А.Платонов. 'Котлован'", неизвестно когда подаренную нам любимым преподавателем.
insert into books (book_name, book_comm) values("А.Платонов. 'Котлован'", "Подарена Пустоваловым Петром Семеновичем");
Ну и еще одну...
insert into books(book_name) values('Поваренная книга');
Вот так. Теперь у нас в базе есть аж три книги. Попробуем в этом убедиться?
Как мы попросим нашу базу выбрать нам все, что в ней есть, без каких-либо условий?
По-русски это бы могло звучать так: "Выбери все из таблицы книг".
Так и напишем (звездочкой в SQL обозначается любой набор параметров, символов и прочего, как почти во всем компьютерном):
select * from books;
И получаем список наших книг. Я не буду приводить тут полностью ответ MySQL, т.к. слишком широкая табличка получилась.
Мы сейчас это подправим. Попросим выбрать только названия книг:
select book_name from books; +------------------------------------------------------+
| book_name |
+------------------------------------------------------+
| А.Толстой. 'Золотой ключик или приключения Буратино' |
| А.Платонов. 'Котлован' |
| Поваренная книга |
+------------------------------------------------------+
3 rows in set (0.00 sec)
Понятно, не так ли?
А теперь присовокупим их порядковые номера:
select book_id, book_name from books; +---------+------------------------------------------------------+
| book_id | book_name |
+---------+------------------------------------------------------+
| 1 | А.Толстой. 'Золотой ключик или приключения Буратино' |
| 2 | А.Платонов. 'Котлован' |
| 3 | Поваренная книга |
+---------+------------------------------------------------------+
3 rows in set (0.01 sec)
Вот так просто.
Теперь давайте попросим нашу понятливую БД выдать нам книгу под номером 2:
select book_id, book_name from books where book_id=2; +---------+----------------------+
| book_id | book_name |
+---------+----------------------+
| 2 | А.Платонов. 'Котлован' |
+---------+----------------------+
1 row in set (0.01 sec)
Ты смотри, нашел!
А если мы хотим все книги от номера 2 и больше?
select book_id, book_name from books where book_id>1; +---------+------------------------+
| book_id | book_name |
+---------+------------------------+
| 2 | А.Платонов. 'Котлован' |
| 3 | Поваренная книга |
+---------+------------------------+
2 rows in set (0.00 sec)
Нате!
Ну хорошо, давайте зададим в запросе что-нибудь похитрее. Например, нам нужна книга, которую мы купили на днях, но не помним про нее буквально ничего.
Для этого так и попросим:
select book_id, book_name from books where book_date between subdate(now(), interval 3 day) and now();
Поясню. Зарезервированное слово between используется тут дословно -- "между". Функция now() дает текущую дату и время. Функция subdate уменьшает указанную дату на указанный период времени.
Т.е. по-русски наш запрос звучал: "выбрать номер книги и название из базы книги, где дата книги находится между датой трехдневной давности и текущей датой".
И что же нам выдала база?
select book_id, book_name from books where book_date between subdate(now(), interval 3 day) and now(); +---------+------------------------------------------------------+
| book_id | book_name |
+---------+------------------------------------------------------+
| 1 | А.Толстой. 'Золотой ключик или приключения Буратино' |
+---------+------------------------------------------------------+
1 row in set (0.01 sec)
Как в сказке!
Еще один примерчик хочу продемонстрировать. Попробуйте понять его сами, без подсказок.
select book_name from books where book_name like "%Толстой%"; +------------------------------------------------------+
| book_name |
+------------------------------------------------------+
| А.Толстой. 'Золотой ключик или приключения Буратино' |
+------------------------------------------------------+
1 row in set (0.01 sec)
| |
Форма входа |
|
|
Календарь новостей |
« Май 2024 » | Пн | Вт | Ср | Чт | Пт | Сб | Вс | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
|
Поиск |
|
|
Друзья сайта |
|
|
Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
| |