Как делать запросы в php. Разделяйте объемные запросы INSERT и DELETE. Как должно быть организовано хранение данных
СУБД MySQL - одна из множества баз данных, поддерживаемых в PHP. Система MySQL распространяется бесплатно и обладает достаточной мощностью для решения реальных задач.
Краткое введение в MySQL
SQL - это аббревиатура от слов Structured Query Language , что означает структурированный язык запросов. Этот язык является стандартным средством для доступа к различным базам данных.
Система MySQL представляет собой сервер, к которому могут подключаться пользователи удаленных компьютеров.
Для работы с базами данных удобно пользоваться средством, входящее в комплект Web-разработчика: Denwer phpMyAdmin . Здесь можно создать новую базу данных, создать новую таблицу в выбранной базе данных, заполнить таблицу данными, а также добавлять, удалять и редактировать данные.
В MySQL определены три базовых типа данных: числовой, дата и время и строчный. Каждая из этих категорий подразделяется на множество типов. Основные из них:
Каждый столбец после своего типа данных содержит и другие спецификаторы:
Тип | Описание |
---|---|
NOT NULL | Все строки таблицы должны иметь значение в этом атрибуте. Если не указано, поле может быть пустым (NULL) |
AUTO_INCREMENT | Специальная возможность MySQL, которую можно задействовать в числовых столбцах. Если при вставке строк в таблицу оставлять такое поле пустым, MySQL автоматически генерирует уникальное значение идентификатора. Это значение будет на единицу больше максимального значения, уже существующего в столбце. В каждой таблице может быть не больше одного такого поля. Столбцы с AUTO_INCREMENT должны быть проиндексированными |
PRIMARY KEY | Столбец является первичным ключом для таблицы. Данные в этом столбце должны быть уникальными. MySQL автоматически индексирует этот столбец |
UNSIGNED | После целочисленного типа означает, что его значение может быть либо положительным, либо нулевым |
COMMENT | Название столбца таблицы |
Создание новой базы данных MySQL CREATE DATABASE .
CREATE DATABASE IF NOT EXISTS `base` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin
Создание новой таблицы осуществляется при помощи SQL-команды CREATE TABLE . Например, таблица books для книжного магазина будет содержать пять полей: ISBN, автор, название, цена и количество экземпляров:
CREATE TABLE books (ISBN CHAR(13) NOT NULL,
PRIMARY KEY (ISBN),
author VARCHAR(30),
title VARCHAR(60),
price FLOAT(4,2),
quantity TINYINT UNSIGNED);
Чтобы избежать сообщения об ошибке, если таблица уже есть необходимо изменить первую строчку, добавив фразу "IF NOT EXISTS":
CREATE TABLE IF NOT EXISTS books ...
Для создания автообновляемого поля с текущей датой типа TIMESTAMP или DATETIME используйте следующую конструкцию:
CREATE TABLE t1 (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Добавление данных в эту таблицу осуществляется при помощи SQL-команды INSERT . Например:
INSERT INTO books (ISBN, author, title, price, quantity) VALUES ("5-8459-0184-7", "Зандстра Мэт", "Освой самостоятельно PHP4 за 24 часа", "129", "5");
Для извлечения данных из таблицы служит оператор SELECT . Он извлекает данные из базы, выбирая строки, которые отвечают заданному критерию поиска. Оператор SELECT сопровождает немалое количество опций и вариантов использования.
Символ * означает, что необходимы все поля. Например:
SELECT * FROM books;
Для получения доступа только к некоторому полю следует указать его имя в инструкции SELECT . Например:
SELECT author, title, price FROM books;
Чтобы получить доступ к подмножеству строк в таблице, следует указать критерий выбора, который устанавливает конструкция WHERE . Например, чтобы выбрать имеющиеся в наличии недорогие книги о PHP, надо составить запрос:
SELECT * FROM books WHERE
price
% Соответствует любому количеству символов, даже нулевых
_ Соответствует ровно одному символу
Для того, чтобы строки, извлеченные по запросу, перечислялись в определенном порядке, используется конструкция ORDER BY . Например:
SELECT * FROM books ORDER BY price;
По умолчанию порядок сортировки идет по возрастанию. Изменить порядок сортировки на обратный можно с помощью ключевого слова DESC :
SELECT * FROM books ORDER BY price DESC;
Сортировать можно и по нескольким столбцам. Вместо названий столбцов можно использовать их порядковые номера:
SELECT * FROM books ORDER BY 4, 2, 3;
Для изменения ранее записанных в таблицу значений нужно воспользоваться командой UPDATE . Например, цену всех книг повысили на 10%:
UPDATE books SET price = price * 1.1;
Конструкция WHERE ограничит работу UPDATE определенным строками. Например:
UPDATE books SET price = price * 1.05 WHERE price
Для удаления строк из базы данных используется оператор DELETE . Ненужные строки указываются при помощи конструкции WHERE . Например, какие-то книги проданы:
DELETE FROM books WHERE quantity = 0;
Если нужно удалить все записи
TRUNCATE TABLE table_name
Для полного удаления таблицы используется:
DROP TABLE table_name
Связь PHP с базой данных MySQL
Поработав с phpMyAdmin над созданием базы данных, можно приступить к подключению этой базы данных к внешнему Web-интерфейсу.
Чтобы получить доступ к базе данных из Web, используя PHP, надо сделать следующие основные шаги:
- Подключение к серверу MySQL.
- Выбор базы данных.
- Выполнение запроса к базе данных:
- добавление ;
- удаление ;
- изменение ;
- поиск ;
- сортировка .
- Получение результата запроса.
- Отсоединение от базы данных.
Для подключения к серверу базы данных в PHP есть функция mysql_connect() . Ее аргументы: имя компьютера, имя пользователя и пароль. Эти аргументы можно опустить. По умолчанию имя компьютера = localhost , тогда имя пользователя и пароль не требуется. Если PHP используется в сочетании с сервером Apache, то можно воспользоваться функцией mysql_pconnect() . В этом случае соединение с сервером не исчезает после завершения работы программы или вызова функции mysql_close() . Функции mysql_connect() и mysql_pconnect() возвращают идентификатор подключения, если все прошло успешно. Например:
$link = mysql_pconnect (); if (!$link) die ("Невозможно подключение к MySQL");
После того, как соединение с сервером MySQL установлено, нужно выбрать базу данных. Для этого используется функция mysql_select_db() . Ее аргумент: имя базы данных. Функция возвращает true , если указанная база данных существует и доступ к ней возможен. Например:
$db = "sample"; mysql_select_db ($db) or die ("Невозможно открыть $db");
Для добавления, удаления, изменения и выбора данных нужно сконструировать и выполнить запрос SQL. Для этого в языке PHP существует функция mysql_query() . Ее аргумент: строка с запросом. Функция возвращает идентификатор запроса.
Пример 1
При каждом выполнении примера 1 в таблицу будет добавляться новая запись, содержащая одни и те же данные. Разумеется имеет смысл добавлять в базу данные, введенные пользователем.
В примере 2.1 приведена HTML-форма для добавления новых книг в базу данных.
Пример 2.1
Результаты заполнения этой формы передаются в insert_book.php.
Пример 2.2
В примере 2.2 введенные строковые данные обработаны функцией addslashes() . Эта функция добавляет обратные слеши перед одинарными кавычками ("), двойными кавычками ("), обратным слешем (\) и null-байтом. Дело в том, что по требованиям систаксиса запросов баз данных такие символы дожны заключаться в кавычки.
Для определения количества записей в результате запроса используется функция mysql_num_rows() .
Все записи результата запроса можно просмотреть в цикле. Перед этим с помощью функции mysql_fetch_ для каждой записи получают ассоциативный массив.
В примере 3.1 приведена HTML-форма для поиска определенных книг в базе данных.
Пример 3.1
Результаты заполнения этой формы передаются в search_book.php.
Пример 3.2
".($i+1). $row["title"]. "
Альтернативный вариант
Пожалуйста, вернитесь назад и закончите ввод"); $searchterm = addslashes ($searchterm); mysql_connect() or die ("Невозможно подключение к MySQL"); mysql_select_db ("sample") or die ("Невозможно открыть БД"); $result = mysql_query ("SELECT * FROM books WHERE ".$_POST["searchtype"]." like "%".$searchterm."%""); $i=1; while($row = mysql_fetch_array($result)) { echo "
".($i++) . $row["title"]."
";
echo "Автор: ".$row["author"]."
";
echo "ISBN: ".$row["ISBN"]."
";
echo "Цена: ".$row["price"]."
";
echo "Количество: ".$row["quantity"]."
Итак, как работает архитектура Web-баз данных:
- Web-браузер пользователя выдает HTTP-запрос определенной Web-страницы. Например, пользователь, используя HTML-форму, ищет все книги о PHP. Страница обработки формы называется search_book.php.
- Web-сервер принимает запрос на search_book.php, извлекает этот файл и передает на обработку механизму PHP.
- PHP выполняет соединение с MySQL-сервером и отправляет запрос.
- Сервер принимает запрос к базе данных, обрабатывает его и отправляет результат (список книг) обратно механизму PHP.
- Механизм PHP завершает выполнение сценария, форматирует результат запроса в HTML. После этого результат в виде HTML возвращается Web-серверу.
- Web-сервер пересылает HTML в браузер, и пользователь имеет возможность просмотреть запрошенный список книг.
Использование механизма транзакций
Использование механизма транзакция на примере как передать деньги от одного человека другому
If(mysql_query ("BEGIN") && mysql_query ("UPDATE money SET amt = amt - 6 WHERE name = "Eve"") && mysql_query ("UPDATE money SET amt = amt + 6 WHERE name = "Ida"") && mysql_query ("COMMIT")){ echo "Успешно"; }else{ mysql_query ("ROLLBACK"); echo "Не успешно"; }
SELECT … FOR UPDATE
Если Вы запускаете несколько процессов, которые делают select запрос к одной и той же таблице, то они могут выбрать одну и ту же запись одновременно.
Чтобы избежать вышеупомянутой ситуации необходимо выполнить не просто SELECT запрос, а его расширенную версию, о которой многие и не подозревают: SELECT … FOR UPDATE.
Таким образом, при выполнении данного запроса, все затронутые записи в базе данных будут заблокированы до завершения сеанса работы с БД или до момента обновления данных записей. Другой скрипт не сможет выбрать заблокированные записи до тех пор, пока не наступит одно из упомянутых условий.
Однако не всё так просто. Вам нужно выполнить ещё несколько условий. Во-первых, ваша таблица должна быть создана на основе архитектуры InnoDB. В противном случае блокировка просто не будет срабатывать. Во-вторых, перед выполнением выборки необходимо отключить авто-коммит запроса. Т.е. другими словами автоматическое выполнение запроса. После того как вы укажите UPDATE запрос, необходимо будет ещё раз обратиться к базе и закоммитить изменения с помощью команды COMMIT:
В данной статье хотелось бы рассказать о том какие SQL - запросы бывают и как их обрабатывать при помощи языка программирования PHP. Ничего сложного и сверхъестественного здесь не будет. Статья скорее адресована на новичков. В языке PHP для обработки запросов имеется целый набор функций с префиксов "mysql", но в данной статье мы рассмотрим самые основные и самые необходимы, а их не так уж и много.
mysql_query()
- Функция посылает запрос к базе данных и в случае успешного выполнения возвращает какой-то идентификатор.
Для того чтобы подключиться к базе данных вы можете использовать код ниже:
$host="localhost"; // имя хоста (уточняется у провайдера), на OpenServer обычно используется localhost $database="db_name"; // имя базы данных, которую вы должны создать $user="user_name"; // заданное вами имя пользователя, либо имя, которое дал вам провайдер $passwod="your_pass"; // заданный вами пароль $db = mysql_connect($host, $user, $password) or die("Не удалось подключиться к MySQL."); mysql_select_db($database) or die("Не удалось подключиться к базе данных.");
Рассмотрим этот код более детально.
mysql_connect
- Функция выполняет подключение к MySQL серверу.
mysql_select_db()
- Функция выполняет подключение к бизе данных.
die()
- Функция срабатывает только в случае ошибки и выводит нам в браузере текст, который мы же и указали. Используется она больше для удобства, чем как обязательность...
mysql_close()
- Используется эта функция для завершения работы с базой данных. Например: mysql_close($db);
.
На этом небольшое введение заканчивается и мы переходим к самим SQL - запросам. Как вы видели код выше, мы используем базу данных MySQL, ее вам и нужно создать, а также создать таблицу и пользователя, указав ему пароль. В данной статье мы будем рассматривать все на примере нашей таблицы "table_name" , создать ее вы можете в phpmyadmin , выполнив следующий SQL - запрос:
CREATE TABLE `table_name` (`id` INT NOT NULL , // уникальный идентификатор будущих записей таблицы `name` VARCHAR(50) NOT NULL , // текстовое поле VARCHAR, максимальной длиной 50 символов `surname` VARCHAR(50) NOT NULL , // такое же текстовое поле, максимальной длиной 50 символов PRIMARY KEY (`id`) // первичный ключ - идентификатор id);
Таблица создана, теперь мы можем смело перейти к выполнению различных запросов. Запрос конечно же оформим с помощью PHP, для этого создадим файл name.php со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // имя хоста (уточняется у провайдера)
$database
=
"db_name"
;
// имя базы данных, которую вы должны создать
$user
=
"user_name"
;
// заданное вами имя пользователя, либо определенное провайдером
$passwod
=
"your_pass"
;
// заданный вами пароль
$db
=
mysql_connect
($host
,
$user
,
$passwod
)
or die
("Не удалось подключиться к MySQL."
)
;
mysql_select_db
($database
)
or die
("Не удалось подключиться к базе данных."
)
;
$query
=
"SELECT * FROM `table_name`"
;
$resource
=
mysql_query
($query
)
;
while
($row
=
mysql_fetch_array
($resource
)
)
{
echo
"Порядковый номер: "
.
$row
[
"id"
]
.
" \n " ; echo "Имя: " . $row [ "name" ] . " \n " ; echo "Фамилия: " . $row [ "surname" ] . " \n " ; } ?> |
\n"; } ?>
И также как и ранее разберем этот код. А начнем мы пожалуй с первого запросы к нашей таблице.
$resource = mysql_query($query);
В случае успешного выполнения запросы, функция "mysql_query()" вернет нам идентификатор "$resource" . На нашем пример мы передаем его другой функции "mysql_fetch_array()" , которая формирует массив и выдает его данные, по выборке из таблицы базы данных. На примере нашей таблицы массив будет состоять из ряда элементов, равных количеству строк (записей) в таблице. Которые в свою очередь будут содержать следующие значения: id, name, surname , в каждой строке таблицы. Используем мы вот этот теперь код:
while($row = mysql_fetch_array($resource))
{
echo "Порядковый номер: ".$row["id"]."
\n";
echo "Имя: ".$row["name"]."
\n";
echo "Фамилия: ".$row["surname"]."
\n"; }
То есть, пока данная нами переменная $row не получает результаты работы функции "mysql_fetch_row" равные нулю, следует выдавать браузеру значения полей: $row["id"], $row["name"], $row["surname"] при помощи переменной "echo" . На этом описание и разбор данного кода закончен.
Разберем еще один пример запроса:
1 | $query = "SELECT name FROM `table_name`" ; |
$query = "SELECT name FROM `table_name`";
Тут мы уже не выбираем из таблицы всё, а выбираем только значения полей "name" . Мы также должны переписать немного и дальнейший код вывода. Он будет уже таким:
1 2 3 4 5 | $resource
=
mysql_query
($query
)
;
while
($row
=
mysql_fetch_array
($resource
)
)
{
echo
"Имя:"
.
$row
[
"name"
]
.
" \n " ; } |
$resource = mysql_query($query);
while($row = mysql_fetch_array($resource))
{
echo "Имя:".$row["name"]."
\n";
}
Достаточно просто не правда ли? Ну что ж, идем дальше. Если вы хотите получить скажем все номера строк, где значение поля surname будет равно Иванов , то запрос будет уже иметь следующий вид:
К примеру на нужно вывести фамилию из строки под номером 10 , то запрос перепишем следующим образом:
После выполнения подобного запроса результатом будет только одна строка, и соответственно нет смысла создавать цикл while и загонять все в массив. Будем использовать более простой код:
$resource = mysql_query($query); $row = mysql_fetch_row($resource); echo "Фамилия десятого человека в списке: ".$row."\n";
Если вы внимательно присмотритесь, то увидите новую функцию "mysql_fetch_row()" , а ранее мы использовали "mysql_fetch_array()" . Данная функция позволяет получить значения полей (или одного поля) какой-то конкретной строки. Так как мы получали только фамилию, а это один элемент, то обратиться к нему мы можем с помощью $row вот так $row; . На этом рассмотрение подобных запросов закончим пока что и двинемся быстренько дальше.
Чтобы добавить в таблицу "table_name" поле "middlename" (отчество) после surname :
1 | $query = "ALTER TABLE `table_name` ADD `middlename` VARCHAR(50) NOT NULL AFTER `surname`" ; |
$query = "ALTER TABLE `table_name` ADD `middlename` VARCHAR(50) NOT NULL AFTER `surname`";
Кроме знаков равенства, при использовании MySQL - запросов можно использовать такое понятие как "похоже на" . Выполним следующий запрос, и получим все записи из таблицы, где в фамилии встречается "ов" :
Использование знака "%" в начале или конце обозначает, что "ов" может быть в любой части слова. Рассмотрим теперь пример где мы выбираем данные по букве "В" в начале имени Обратите внимание на расположение знака "%" .
Следующий запрос на получение максимального значения поля id:
$query = "ALTER TABLE `table_name` DROP `surname`";
И теперь полностью удалим еще нашу таблицу "table_name" :
1 | $query = "DROP TABLE `table_name`" ; |
$query = "DROP TABLE `table_name`";
На этом пожалуй мы и закончим. Подводя итоги статьи, мы рассмотрели построение основных запросов, вывод данных из базы MySQL, подключение к базе. Хотелось бы еще уточнить для запросов на получение (SELECT) мы можем использовать функцию - mysql_query() . Вот собственно и все, что я хотел вам рассказать. При возникновении вопросов или в случае появления дополнений к статье пишите в комментарии.
Содержание статьи
1.
Самые простые MySQL запросы
2.
Простые SELECT (выбрать) запросы
3.
Простые INSERT (новая запись) запросы
4.
Простые UPDATE (перезаписать, дописать) запросы
5.
Простые DELETE (удалить запись) запросы
6.
Простые DROP (удалить таблицу) запросы
7.
Сложные MySQL запросы
8.
MySQL запросы и переменные PHP
1. Самые простые SQL запросы
1. Выведет список ВСЕХ баз.SHOW databases;
2. Выведет список ВСЕХ таблиц в Базе Данных base_name.
SHOW tables in base_name;
2. Простые SELECT (выбрать) запросы к базе данных MySQL
SELECT – запрос, который выбирает уже существующие данные из БД. Для выбора можно указывать определённые параметры выбора. Например, суть запроса русским языком звучит так - ВЫБРАТЬ такие-то колонки ИЗ такой-то таблицы ГДЕ параметр такой-то колонки равен значению.1. Выбирает ВСЕ данные в таблице tbl_name.
SELECT * FROM tbl_name;
2. Выведет количество записей в таблице tbl_name.
SELECT count(*) FROM tbl_name;
3. Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.
SELECT * FROM tbl_name LIMIT 2,3;
4. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.
SELECT * FROM tbl_name ORDER BY id;
5. Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.
SELECT * FROM tbl_name ORDER BY id DESC;
6. Выбирает (SELECT
) ВСЕ (*) записи из (FROM
) таблицы users
и сортирует их (ORDER BY
) по полю id
в порядке возрастания, лимит (LIMIT
) первые 5 записей.
SELECT * FROM users ORDER BY id LIMIT 5;
7. Выбирает все записи из таблицы users
, где поле fname
соответствует значению Gena
.
SELECT * FROM users WHERE fname="Gena";
8. Выбирает все записи из таблицы users
, где значение поля fname
начинается с Ge
.
SELECT * FROM users WHERE fname LIKE "Ge%";
9. Выбирает все записи из таблицы users
, где fname
заканчивается на na
, и упорядочивает записи в порядке возрастания значения id
.
SELECT * FROM users WHERE fname LIKE "%na" ORDER BY id;
10. Выбирает все данные из колонок fname
, lname
из таблице users
.
SELECT fname, lname FROM users;
11.
Допустим у Вас в таблице пользовательских данных есть страна. Так вот если Вы хотите вывести ТОЛЬКО список встречающихся значений (чтобы, например, Россия не выводилось 20 раз, а только один), то используем DISTINCT. Выведет, из массы повторяющихся значений Россия, Украина, Беларусь. Таким образом, из таблицы users
колонки country
будут выведены ВСЕ УНИКАЛЬНЫЕ значения
SELECT DISTINCT country FROM users;
12. Выбирает ВСЕ данные строк из таблицы users
где age
имеет значения 18,19 и 21.
SELECT * FROM users WHERE age IN (18,19,21);
13.
Выбирает МАКСИМАЛЬНОЕ значение age
в таблице users
. То есть если у Вас в таблице самое большее значение age
(с англ. возраст) равно 55, то результатом запроса будет 55.
SELECT max(age) FROM users;
14. Выберет данные из таблицы users
по полям name
и age
ГДЕ age
принимает самое маленькое значение.
SELECT name, min(age) FROM users;
15. Выберет данные из таблицы users
по полю name
ГДЕ id
НЕ РАВЕН 2.
SELECT name FROM users WHERE id!="2";
3. Простые INSERT (новая запись) запросы
INSERT – запрос, который позволяет ПЕРВОНАЧАЛЬНО вставить запись в БД. То есть создаёт НОВУЮ запись (строчку) в БД.1. Делает новую запись в таблице users , в поле name вставляет Сергей, а в поле age вставляет 25. Таким образом, в таблицу дописывается новая строки с данными значениями. Если колонок больше, то они оставшиеся останутся либо пустыми, либо с установленными по умолчанию значениями.
INSERT INTO users (name, age) VALUES ("Сергей", "25");
4. Простые UPDATE запросы к базе данных MySQL
UPDATE – запрос, который позволяет ПЕРЕЗАПИСАТЬ значения полей или ДОПИСАТЬ что-то в уже существующей строке в БД. Например, есть готовая строка, но в ней нужно перезаписать параметр возраста, так как он изменился со временем.1. В таблице users age становится 18.
UPDATE users SET age = "18" WHERE id = "3";
2.
Всё то же самое, что и в первом запросе, просто показан синтаксис запроса, где перезаписываются два поля и более.
В таблице users
ГДЕ id равно 3 значение поля age
становится 18, а country
Россия.
UPDATE users SET age = "18", country = "Россия" WHERE id = "3";
5. Простые DELETE (удалить запись) запросы к базе данных MySQL
DELETE – запрос, который удаляет строку из таблицы.1. Удаляет строку из таблицы users ГДЕ id равен 10.
DELETE FROM users WHERE id = "10";
6. Простые DROP (удалить таблицу) запросы к базе данных MySQL
DROP – запрос, который удаляет таблицу.1. Удаляет целиком таблицу tbl_name .
DROP TABLE tbl_name;
7. Сложные запросы к базе данных MySQL
Любопытные запросы, которые могут пригодиться даже опытным пользователямSELECT id,name,country FROM users,admins WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date) <= 14 AND activation != "0" ORDER BY registration_date DESC;
Данный сложный запрос ВЫБИРАЕТ колонки id,name,country
В ТАБЛИЦАХ users,admins
ГДЕ registration_date
(дата) не старше 14
дней И activation
НЕ РАВНО 0
, СОРТИРОВАТЬ по registration_date
в обратном порядке (новое в начале).
UPDATE users SET age = "18+" WHERE age = (SELECT age FROM users WHERE male = "man");
Выше указан пример так называемого запроса в запросе
в SQL. Обновить возраст среди пользователей на 18+, где пол - мужской. Подобные варианты запроса не рекомендую. По личному опыту скажу, лучше создать несколько отдельных - они будут прорабатываться быстрее.
8. Запросы к базе данных MySQL и PHP
В MySQL запросы в PHP странице можно вставлять переменные в качестве сравниваемых и тп значений. Пара примеров1. Выбирает все записи из таблицы users , где поле fname соответствует значению переменной $name .
SELECT * FROM users WHERE fname="$name";
2. В таблице users
ГДЕ id равно 3 значение поля age
изменяется на значение переменной $age.
UPDATE users SET age = "$age" WHERE id = "3";
Внимание! Если Вам интересен какой-либо ещё пример, то пишите вопрос в комментарии!
Синтаксис:
* где fields1
— поля для выборки через запятую, также можно указать все поля знаком *; table
— имя таблицы, из которой вытаскиваем данные; conditions
— условия выборки; fields2
— поле или поля через запятую, по которым выполнить сортировку; count
— количество строк для выгрузки.
* запрос в квадратных скобках не является обязательным для выборки данных.
Простые примеры использования select
1. Обычная выборка данных:
> SELECT * FROM users
2. Выборка данных с объединением двух таблиц (JOIN):
SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id
* в данном примере идет выборка данных с объединением таблиц users и users_rights . Объединяются они по полям user_id (в таблице users_rights) и id (users). Извлекается поле name из первой таблицы и все поля из второй.
3. Выборка с интервалом по времени и/или дате
а) известна точка начала и определенный временной интервал:
* будут выбраны данные за последний час (поле date ).
б) известны дата начала и дата окончания:
25.10.2017 и 25.11.2017 .
в) известны даты начала и окончания + время:
* выбираем данные в промежутке между 25.03.2018 0 часов 15 минут и 25.04.2018 15 часов 33 минуты и 9 секунд .
г) вытаскиваем данные за определенные месяц и год:
* извлечем данные, где в поле date присутствуют значения для апреля 2018 года.
4. Выборка максимального, минимального и среднего значения:
> SELECT max(area), min(area), avg(area) FROM country
* max — максимальное значение; min — минимальное; avg — среднее.
5. Использование длины строки:
* данный запрос должен показать всех пользователей, имя которых состоит из 5 символов.
Примеры более сложных запросов или используемых редко
1. Объединение с группировкой выбранных данных в одну строку (GROUP_CONCAT):
* из таблицы users извлекаются данные по полю id , все они помещаются в одну строку, значения разделяются запятыми .
2. Группировка данных по двум и более полям:
> SELECT * FROM users GROUP BY CONCAT(title, "::", birth)
* итого, в данном примере мы сделаем выгрузку данных из таблицы users и сгруппируем их по полям title и birth . Перед группировкой мы делаем объединение полей в одну строку с разделителем :: .
3. Объединение результатов из двух таблиц (UNION):
> (SELECT id, fio, address, "Пользователи" as type FROM users)
UNION
(SELECT id, fio, address, "Покупатели" as type FROM customers)
* в данном примере идет выборка данных из таблиц users и customers .
4. Выборка средних значений, сгруппированных за каждый час:
SELECT avg(temperature), DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H") as hour_datetime FROM archive GROUP BY DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H")
* здесь мы извлекаем среднее значение поля temperature из таблицы archive и группируем по полю datetimeupdate (с разделением времени за каждый час).
Вставка (INSERT)
Синтаксис 1:
> INSERT INTO