• доступно о веб-разработке
14.11.2012 Базы Данных, Технологии

Запросы / Неделя MySQL

У всех у нас разные запросы. Кому-то хватает немногого, а иному — подавай все самое лучшее. Точно также и наши запросы к базам данных. Ведь все мы знаем, что там что-то хранится. Но далеко не все знают, как нам это что-то получить. Для этого мы, словно древние заклинатели змей, и познаем язык запросов, на котором будем общаться с базами данных.

Хватит лирики, давайте поговорим по простому. Есть специальный язык запросов, называется SQL — Simple Query Language («простой язык запросов»). Он служит для того, чтобы сообщить базе данных, какая информация нам нужна. Мы как клиент обращаемся к серверу базы данных, а он уже, как сотрудник библиотеки, находит (или не находит) нужную информацию и преподносит нам ответ.

Сразу сделаю ремарку. В прошлой статье я показал вам базовый архаичный способ подключения к базе данных. Разумеется, это только для расширения кругозора.

Если вы заглянете в мануал  (manual, учебник) по PHP, то увидите, что авторы уже не рекомендуют использовать старый способ:

http://www.php.net/manual/ru/function.mysql-connect.php
[box type=»info»]Не рекомендуется использовать это расширение. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:

[/box]
Он будет, конечно, работать, но лучше использовать один из двух предлагаемых новых классов. Ведь ООП по праву заменило процедурное программирование, и мы просто обязаны пользоваться его преимуществами.

Как бы то ни было, запросы в любом случае одни и те же будут.

Итак, что такое запрос? Это строка, содержащая в себе ряд параметров, которые говорят базе данных, что делать и как.

Возьмем пример запроса при помощи двух современных библиотек(встроенных в PHP) с указанной выше страницы:

<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

Как видите, я не ошибался, когда говорил, что запросы в любом случае одни и те же.

Как обычно, мы познаем самое главное, всему остальному вы учитесь в процессе получения опыта.

Есть три базовых типа запроса. Определяются они первым словом строки запроса:

  • SELECT — выборка информации из базы
  • INSERT — вставка информации в базу
  • UPDATE — обновление информации в базе

В чем разница между INSERT и UPDATE? Сейчас объясню.

Обычно в любой таблице есть поле, которое является первичным ключом. По типу это порядковый номер строки.

Смотрите часть таблицы с постами с этого сайта:

Это поле, которое определено как первичный ключ или PRIMARY KEY, имеет свойство AUTO_INCREMENT. Как известно с прошлой недели PHP, инкремент — это рост на одну единицу за один цикл.

Вы же не хотите каждый раз смотреть, сколько у вас в таблице статей, чтобы ставить номер новой статьи вручную?

Поэтому и используется автоинкремент. Счетчик ставит значение новой записи автоматически при добавлении её в таблицу.

Так вот, разница между INSERT и UPDATE в том, что INSERT не может обновить значение записи, а только вставить новый ряд.

Далее по порядку.

Обычно в программировании при обсуждении есть такое слово — «опциональный» от англ. optional. То есть необязательный.

Какие-то параметры или части запроса могут использоваться при необходимости, а остальные опциональные.

Их обычно указывают в квадратных скобках.

Сейчас я вам опишу достаточно развернутый SQL запрос на выборку:

SELECT * FROM posts [INNER JOIN users ON posts.author_id = users.user_id][ WHERE posts.category = ‘info’][ ORDER BY posts.id DESC]

Как видите, базовый запрос достаточно короткий:

SELECT * FROM posts

Мы говорим базе данных — выбери все поля (*) из таблицы posts.

Можно указать какие-то конкретные поля:

SELECT id, subject, body FROM posts

Если вы делаете сложный запрос с перекрещиванием таблиц (JOIN, INNER JOIN, OUTER JOIN), то когда поля у них называются одинаково, то можно использовать полное имя вместе с названием таблицы:

SELECT posts.id, posts.subject, users.id, users.name FROM posts JOIN users ON users.id = posts.author_id

О сложных запросах лучше поговорить отдельно.

Далее.

Нам нужно уточнить условия запроса, чтобы он нам не все данные отдавал, а только те, которые соответствуют критериям:

SELECT * FROM posts WHERE author_id = 1

То есть те записи, автор которых — админ, который на сайтах всегда с номером 1.

Можно указать несколько условий с операторами OR (или) и AND (и).

SELECT * FROM posts WHERE author_id = 1 AND published_date > ‘2012-11-10’

SELECT * FROM posts WHERE author_id = 1 AND (published_date > ‘2012-11-10’ OR published_date < ‘2012-11-09’)

Не забывайте ставить круглые скобки, потому что AND имеет приоритет над OR.

Потом мы хотим отсортировать данные по какому-то ключу:

SELECT * FROM  posts WHERE author_id ORDER BY id ASC

Мы указываем это поле и говорим порядок — в порядке возрастания ASC (Ascending) или убывания DESC (Descending).

Как вставить информацию в таблицу?

Вот здесь уже вы * не обойдетесь, потому что надо знать, как какое поле вы что вставляете:

INSERT INTO posts (subject,body) VALUES (‘Заголовок статьи’,’Содержимое статьи’);

Здесь никаких хитростей, как в SELECT нет. Вы просто вставляете в таблицу новую запись.

Как обновить информацию в таблице?

Вам известен порядковый номер статьи по первичному ключу.

UPDATE posts SET subject = ‘Новый заголовок’ WHERE id = 4

 И вот вы меняете заголовок статьи с номером 4.

Почему номер, а не прошлое название статьи? Потому что первичное поле работает быстро. Это одно значение. А попробуйте найти запись по длиной строке! Можно и так, но неэффективно.

Можно обновить данные во всей таблице сразу:

UPDATE posts SET published = 1

И у всех статей мы поменяли один параметр.

Что дальше?

Посмотрим, как вы усвоили пройденное.

Открывайте свой phpMyAdmin, создавайте новую базу и переходите во вкладку SQL.

Вот вам кусочек таблицы со статьями с этого сайта:

-- phpMyAdmin SQL Dump
-- version 2.11.8.1deb5+lenny9
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Ноя 14 2012 г., 19:59
-- Версия сервера: 5.0.51
-- Версия PHP: 5.2.6-1+lenny16

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- База данных: `codemotion`
--

-- --------------------------------------------------------

--
-- Структура таблицы `wp_posts`
--

CREATE TABLE IF NOT EXISTS `wp_posts` (
  `ID` bigint(20) unsigned NOT NULL auto_increment,
  `post_author` bigint(20) unsigned NOT NULL default '0',
  `post_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `post_date_gmt` datetime NOT NULL default '0000-00-00 00:00:00',
  `post_content` longtext NOT NULL,
  `post_title` text NOT NULL,
  `post_excerpt` text NOT NULL,
  `post_status` varchar(20) NOT NULL default 'publish',
  `comment_status` varchar(20) NOT NULL default 'open',
  `ping_status` varchar(20) NOT NULL default 'open',
  `post_password` varchar(20) NOT NULL default '',
  `post_name` varchar(200) NOT NULL default '',
  `to_ping` text NOT NULL,
  `pinged` text NOT NULL,
  `post_modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `post_modified_gmt` datetime NOT NULL default '0000-00-00 00:00:00',
  `post_content_filtered` longtext NOT NULL,
  `post_parent` bigint(20) unsigned NOT NULL default '0',
  `guid` varchar(255) NOT NULL default '',
  `menu_order` int(11) NOT NULL default '0',
  `post_type` varchar(20) NOT NULL default 'post',
  `post_mime_type` varchar(100) NOT NULL default '',
  `comment_count` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`ID`),
  KEY `post_name` (`post_name`),
  KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
  KEY `post_parent` (`post_parent`),
  KEY `post_author` (`post_author`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=589 ;

--
-- Дамп данных таблицы `wp_posts`
--

INSERT INTO `wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES
(26, 1, '2012-09-28 00:10:00', '2012-09-27 20:10:00', '<p style="text-align: center;"><img class="size-full wp-image-18 aligncenter" title="codemotion" src="https://storage.yandexcloud.net/codemotion/uploads/2012/09/codemotion.jpg" alt="" width="550" height="300" /></p>\r\nДобро пожаловать на сайт «ДвижКод», созданный с целью рассказать простым языком о сложных вещах и научить вас, уважаемые читатели, создавать сайты в Интернете.\r\n\r\nВы уже, верно, задаетесь вопросом, чем же наш сайт отличается от всех остальных? <!--more-->\r\n\r\nДля начала позвольте представиться. Меня зовут Беляев Дмитрий, и я занимаюсь разработкой веб-сайтов с 1999 года. Да, с той самой поры, когда безлимитный Интернет казался чем-то фантастическим, а пределом мечтания был модем со скоростью доступа в Сеть 56,6Кбит/секунду.\r\n\r\nЗанимаясь созданием бесчисленных сайтов я, как и многие, пришел к тому, что в один прекрасный момент стал создавать собственную систему управления сайтами. Об этом мы будем говорить и не один раз, а сейчас отмечу лишь, что этот опыт значимо повлиял на мировоззрение.\r\n\r\nВ 2012 году я закончил <a href="http://mte.ifmo.ru/">Магистерский Корпоративный Факультет</a> (попытка реализовать MBA на базе российского вуза) Санкт-Петербургского Государственного Научно-Исследовательского Университета Информационных Технологий, Механики и Оптики (<a href="http://ifmo.ru">СПбНИУ ИТМО</a>). Темой защищенной на отлично диссертации была, как раз, разрабатываемая мною система управления сайтами.\r\n\r\nВернемся к тематике сайта. Многие программисты в силу специфики профессии испытывают проблемы с коммуникациями, что логично, если общению с людьми предпочитается работа за компьютером. Поэтому сегодня не так просто найти сайт, на страницах которого простым языком объяснялись сложные вещи. Конечно, такие сайты есть, и я тоже буду о них рассказывать.\r\n\r\nОтсюда родился основной девиз сайта — «просто о сложном».\r\n\r\nСегодня многие IT-шники, впитывающие в себя западную культуру, мечтают бросить нашу страну и уехать работать в зарубежную компанию типа Google, вместо того, чтобы внести свой вклад в развитие нашей страны. Многие, но не все.\r\n\r\nЕсть и такие, кто хочет сделать весомый вклад в развитие информационных технологий в России, на пользу гражданскому обществу и, что не мудрено, семейному бюджету.\r\n\r\nДля чтобы таких людей становилось все больше и был создан этот сайт.\r\n\r\nСредняя зарплата разработчика на данный момент составляет от 15 до 100 тысяч рублей в зависимости от города и квалификации специалиста.\r\n\r\nЗдесь вы научитесь не только технологиям веб-разработке, но и узнаете, как можно заработать, применяя свои знания на практике.\r\n\r\nПо ходу повествования мы будем затрагивать самые разные сферы веб-разработки — от азов и технологий до юридических аспектов. Со своей стороны я постараюсь рассказать вам не только все, что знаю и умею сам, но и буду привлекать сторонних специалистов, чья компетенция в конкретной среде выше.\r\n\r\nОт вас же требуется только одно — посещать блог, читать новые материалы и стараться выполнять задания. Ведь без практики далеко не уехать в мире современной веб-разработки.\r\n\r\nНу что, уважаемые читатели, вы готовы приступить к обучению?', 'Добро пожаловать', '', 'inherit', 'open', 'open', '', '17-revision-6', '', '', '2012-09-28 00:10:00', '2012-09-27 20:10:00', '', 17, 'http://codemotion.ru/17-revision-6-26.html', 0, 'revision', '', 0),
(28, 1, '2012-09-28 00:12:56', '2012-09-27 20:12:56', '<p style="text-align: center;"><img class="size-full wp-image-18 aligncenter" title="codemotion" src="https://storage.yandexcloud.net/codemotion/uploads/2012/09/codemotion.jpg" alt="" width="550" height="300" /></p>\r\nДобро пожаловать на сайт «ДвижКод», созданный с целью рассказать простым языком о сложных вещах и научить вас, уважаемые читатели, создавать сайты в Интернете.\r\n\r\nВы уже, верно, задаетесь вопросом, чем же наш сайт отличается от всех остальных? <!--more-->\r\n\r\nДля начала позвольте представиться. Меня зовут Беляев Дмитрий, и я занимаюсь разработкой веб-сайтов с 1999 года. Да, с той самой поры, когда безлимитный Интернет казался чем-то фантастическим, а пределом мечтания был модем со скоростью доступа в Сеть 56,6Кбит/секунду.\r\n\r\nЗанимаясь созданием бесчисленных сайтов я, как и многие, пришел к тому, что в один прекрасный момент стал создавать собственную систему управления сайтами. Об этом мы будем говорить и не один раз, а сейчас отмечу лишь, что этот опыт значимо повлиял на мировоззрение.\r\n\r\nВ 2012 году я закончил <a href="http://mte.ifmo.ru/">Магистерский Корпоративный Факультет</a> (попытка реализовать MBA на базе российского вуза) Санкт-Петербургского Государственного Научно-Исследовательского Университета Информационных Технологий, Механики и Оптики (<a href="http://ifmo.ru">СПбНИУ ИТМО</a>). Темой защищенной на отлично диссертации была, как раз, разрабатываемая мною система управления сайтами.\r\n\r\nВернемся к тематике сайта. Многие программисты в силу специфики профессии испытывают проблемы с коммуникациями, что логично, если общению с людьми предпочитается работа за компьютером. Поэтому сегодня не так просто найти сайт, на страницах которого простым языком объяснялись сложные вещи. Конечно, такие сайты есть, и я тоже буду о них рассказывать.\r\n\r\nОтсюда родился основной девиз сайта — «просто о сложном».\r\n\r\nСегодня многие IT-шники, впитывающие в себя западную культуру, мечтают бросить нашу страну и уехать работать в зарубежную компанию типа Google, вместо того, чтобы внести свой вклад в развитие нашей страны. Многие, но не все.\r\n\r\nЕсть и такие, кто хочет сделать весомый вклад в развитие информационных технологий в России, на пользу гражданскому обществу и, что не мудрено, семейному бюджету.\r\n\r\nДля чтобы таких людей становилось все больше и был создан этот сайт.\r\n\r\nСредняя зарплата разработчика на данный момент составляет от 15 до 100 тысяч рублей в зависимости от города и квалификации специалиста.\r\n\r\nЗдесь вы научитесь не только технологиям веб-разработке, но и узнаете, как можно заработать, применяя свои знания на практике.\r\n\r\nПо ходу повествования мы будем затрагивать самые разные сферы веб-разработки — от азов и технологий до юридических аспектов. Со своей стороны я постараюсь рассказать вам не только все, что знаю и умею сам, но и буду привлекать сторонних специалистов, чья компетенция в конкретной среде выше.\r\n\r\nОт вас же требуется только одно — посещать блог, читать новые материалы и стараться выполнять задания. Ведь без практики далеко не уехать в мире современной веб-разработки.\r\n\r\nНу что, уважаемые читатели, вы готовы приступить к обучению?', 'Добро пожаловать', '', 'inherit', 'open', 'open', '', '17-revision-7', '', '', '2012-09-28 00:12:56', '2012-09-27 20:12:56', '', 17, 'http://codemotion.ru/17-revision-7-28.html', 0, 'revision', '', 0),
(31, 1, '2012-09-28 00:28:07', '2012-09-27 20:28:07', '<p style="text-align: center;"><img class="size-full wp-image-18 aligncenter" title="codemotion" src="https://storage.yandexcloud.net/codemotion/uploads/2012/09/codemotion.jpg" alt="" width="550" height="300" /></p>\r\nДобро пожаловать на сайт «ДвижКод», созданный с целью рассказать простым языком о сложных вещах и научить вас, уважаемые читатели, создавать сайты в Интернете.\r\n\r\nВы уже, верно, задаетесь вопросом, чем же наш сайт отличается от всех остальных? <!--more-->\r\n\r\nДля начала позвольте представиться. Меня зовут Беляев Дмитрий, и я занимаюсь разработкой веб-сайтов с 1999 года. Да, с той самой поры, когда безлимитный Интернет казался чем-то фантастическим, а пределом мечтания был модем со скоростью доступа в Сеть 56,6Кбит/секунду.\r\n\r\nЗанимаясь созданием бесчисленных сайтов я, как и многие, пришел к тому, что в один прекрасный момент стал создавать собственную систему управления сайтами. Об этом мы будем говорить и не один раз, а сейчас отмечу лишь, что этот опыт значимо повлиял на мировоззрение.\r\n\r\nВ 2012 году я закончил <a href="http://mte.ifmo.ru/">Магистерский Корпоративный Факультет</a> (попытка реализовать MBA на базе российского вуза) Санкт-Петербургского Государственного Научно-Исследовательского Университета Информационных Технологий, Механики и Оптики (<a href="http://ifmo.ru">СПбНИУ ИТМО</a>). Темой защищенной на отлично диссертации была, как раз, разрабатываемая мною система управления сайтами.\r\n\r\nВернемся к тематике сайта. Многие программисты в силу специфики профессии испытывают проблемы с коммуникациями, что логично, если общению с людьми предпочитается работа за компьютером. Поэтому сегодня не так просто найти сайт, на страницах которого простым языком объяснялись сложные вещи. Конечно, такие сайты есть, и я тоже буду о них рассказывать.\r\n\r\nОтсюда родился основной девиз сайта — «просто о сложном».\r\n\r\nСегодня многие IT-шники, впитывающие в себя западную культуру, мечтают бросить нашу страну и уехать работать в зарубежную компанию типа Google, вместо того, чтобы внести свой вклад в развитие нашей страны. Многие, но не все.\r\n\r\nЕсть и такие, кто хочет сделать весомый вклад в развитие информационных технологий в России, на пользу гражданскому обществу и, что не мудрено, семейному бюджету.\r\n\r\nДля чтобы таких людей становилось все больше и был создан этот сайт.\r\n\r\nСредняя зарплата разработчика на данный момент составляет от 15 до 100 тысяч рублей в зависимости от города и квалификации специалиста.\r\n\r\nЗдесь вы научитесь не только технологиям веб-разработке, но и узнаете, как можно заработать, применяя свои знания на практике.\r\n\r\nПо ходу повествования мы будем затрагивать самые разные сферы веб-разработки — от азов и технологий до юридических аспектов. Со своей стороны я постараюсь рассказать вам не только все, что знаю и умею сам, но и буду привлекать сторонних специалистов, чья компетенция в конкретной среде выше.\r\n\r\nОт вас же требуется только одно — посещать блог, читать новые материалы и стараться выполнять задания. Ведь без практики далеко не уехать в мире современной веб-разработки.\r\n\r\nНу что, уважаемые читатели, вы готовы приступить к обучению?', 'Добро пожаловать', '', 'inherit', 'open', 'open', '', '17-revision-8', '', '', '2012-09-28 00:28:07', '2012-09-27 20:28:07', '', 17, 'http://codemotion.ru/17-revision-8-31.html', 0, 'revision', '', 0);

Копируйте его в буфер обмена и вставляйте в окошко вкладки SQL, после чего выполняйте запрос.

Как видите, вначале определяется структура таблицы.

Сделайте несколько выборок разного типа.

Если вам не хватает написанного выше, учитесь пользоваться поиском.

Открываете Гугл(он в таких вещах как программирование ищет лучше, ИМХО) и пишите ключевые слова «MySQL запросы». Смотрите, читаете.

И да пребудет с вами сила.

Поделиться

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