Пишемо на PHP: Мова SQL
Перш ніж переходити до наступного класу (utils), я пропоную вам зробити невеликий екскурс в мову запитів SQL.
Це необхідно з двох причин. По-перше, не хочу, щоб ви дивилися на SQL-фрагменти наступних скриптів як парнокопитні тварини на тільки що побудоване загороджувальні споруди. А по-друге, мені хочеться донести до вас красу цієї мови, приховану в його простоті і "людяності".
А все запити до бази даних можна розділити на три основні групи:Як створюються таблиці ми вже бачили. На цьому етапі я зупинятися не буду, бо тут нічого цікавого немає. Як і стандартного. У різних БД створення таблиць, функцій і індексації може проводитися по-різному. Це не так важливо.
Ми зупинимося на двох інших групах.
Додавання, зміна, видалення інформації проводиться майже людською мовою. Тому всі команди SQL так легко запам'ятати.
Припустимо, у нас є таблиця books (книги), в якій ми зберігаємо інформацію про своїй домашній бібліотеці.
Як би ми це зробили, якби база даних управлялася людським голосом?
Ось ми так і запишемо, а SQL з задоволенням нас зрозуміє. Тільки по-англійськи.
Ось так. Майже по-людськи.
Наступною книгою для контрасту додамо "А.Платонов. 'Котлован'", невідомо коли подаровану нам улюбленим викладачем.
insert into books (book_name, book_comm) values ( "А.Платонов. 'Котлован'", "Подаруй Пустоваловим Петром Семеновичем");
insert into books (book_name) values ( 'Куховарська книга');
Ось так. Тепер у нас в базі є аж три книги. Спробуємо в цьому переконатися?
Як ми попросимо нашу базу вибрати нам все, що в ній є, без будь-яких умов?
По-русски це б могло звучати так: "Обери все з таблиці книг".
Так і напишемо (зірочкою в SQL позначається будь-який набір параметрів, символів та іншого, як багато в чому комп'ютерному):
select * from books;
І отримуємо список наших книг. Я не буду приводити тут повністю відповідь MySQL, тому що занадто широка табличка вийшла.
Ми зараз це підправимо. Попросимо вибрати тільки назви книг:
select book_name from books;
Зрозуміло, чи не так?
А тепер знову додав їх порядкові номери:
select book_id, book_name from books;
Ось так просто.
Тепер давайте попросимо нашу тямущий БД видати нам книгу під номером 2:
select book_id, book_name from books where book_id = 2;
Ти дивись, знайшов!
А якщо ми хочемо все книги від номера 2 і більше?
select book_id, book_name from books where book_id> 1;
Нате!
Ну добре, давайте задамо в запиті що-небудь хитріше. Наприклад, нам потрібна книга, яку ми купили на днях, але не пам'ятаємо про неї буквально нічого.
Для цього так і попросимо:
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 ();
Ще один прімерчік хочу продемонструвати. Спробуйте зрозуміти його самі, без підказок.
select book_name from books where book_name like "% Толстой%";