Библиотека Интернет Индустрии I2R.ru |
|||
|
Пишем на PHPЭто необходимо по двум причинам. Во-первых, не хочу, чтобы вы смотрели на 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) Руслан Курепин |
|
2000-2008 г. Все авторские права соблюдены. |
|