Запросы с групповыми операциями

Содержание

Слайд 2

Лабораторная работа 10
Работа 10. SQL выполняется на учебной базе "sakila"
БД "sakila" создается

Лабораторная работа 10 Работа 10. SQL выполняется на учебной базе "sakila" БД
вручную (пустая).
А все наполнение – при помощи SQL-инструкций из файлов 1.sql и 2.sql

Слайд 3

Соединение с БД

1. Соединение с сервером БД
$lnk= mysql_connect("localhost", "username", "password")
or die("Couldnotconnect:

Соединение с БД 1. Соединение с сервером БД $lnk= mysql_connect("localhost", "username", "password")
" . mysql_error());
2. Выбор БД
mysql_select_db("dbname", $lnk)
or die('Can\'t usedbname: '. mysql_error());
Часто выносится в отдельный файл, подключаемый require_once("db_connect.php");

Слайд 4

Проверка текущей ситуации на странице

Читаем шаблон формы в строковую переменную $page;
Проверяем –

Проверка текущей ситуации на странице Читаем шаблон формы в строковую переменную $page;
мы пришли по кнопке Submit?
// МЫ ВПЕРВЫЕ НА СТРАНИЦЕ?
if(isset($_POST['submit'])) // нет, не впервые

Слайд 5

Заполнение переменных из глобальных массивов

Переносим массивы $_POST и $_GET в переменные
так:
$chcat =

Заполнение переменных из глобальных массивов Переносим массивы $_POST и $_GET в переменные
isset($_POST['chcat']) ? true:false;
$chrat = isset($_POST['chrat']) ? true:false;
$chlong = isset($_POST['chlong']) ? true:false;
$chprice = isset($_POST['chprice']) ? true:false;
или так:
extract($_POST);

Слайд 6

Изменения в БД

Если есть массив $_POST – выполняем действия для кнопки Submit

Изменения в БД Если есть массив $_POST – выполняем действия для кнопки
(например, добавляем запись)
Если есть $_GET – выполняем действия для гиперссылки (например, удаляем запись)
В обоих случаях нам придется сформировать запрос и отправить его на выполнение.

Слайд 7

Отображение данных на странице

Формируем запрос SELECT для выборки
(можно изначально сделать фиксированный запрос,

Отображение данных на странице Формируем запрос SELECT для выборки (можно изначально сделать
например
$sql = "SELECT `film`.`film_id`,`title`,`rental_rate`,`length`,`rating`,`category_id` ";
$sql .= "FROM `film`,`film_category` ";
$sql .= "WHERE `rental_rate` > 2 AND `rental_rate` < 3 ";
$sql .= "AND `length` > 100 AND `length` < 200 ";
$sql .= "AND `rating` = 'G' ";
$sql .= "AND `category_id` = 1 ";
$sql .= "AND `film`.`film_id` = `film_category`.`film_id` ";
$sql .= "LIMIT 0, 30";
чтобы убедиться, что все работает. А затем постепенно подставлять значения полей.

Слайд 8

Отображение данных на странице

Выполняем запрос
$result = mysql_query($sql);
В цикле каждую строку запроса

Отображение данных на странице Выполняем запрос $result = mysql_query($sql); В цикле каждую
переноси в массив (здесь – ассоциативный)
while($date = mysql_fetch_assoc($result))
Формируем строку для вывода на страницу:
$str = $date['id']." ".$date['name']."
";
Заменяем плейсхолдер на странице на полученную строку:
$page = str_replace('{max}', $str, $page);
Выводим страницу
echo $page;
ВСЕ!

Слайд 9

Задание 2

Требуется сразу же заполнить 2 списка и 4 поля:
Для получения диапазона

Задание 2 Требуется сразу же заполнить 2 списка и 4 поля: Для
продолжительности и цены используйте операции MIN и MAX
$sql = "SELECT MIN(`len`) minlen FROM `film`;";

Слайд 10

Задание 2

Для получения списка постройте запрос, который вернет все категории или все

Задание 2 Для получения списка постройте запрос, который вернет все категории или
варианты рейтинга:
$sql="SELECT DISTINCT `r` FROM `film`;";
И заполните соответствующий плейсхолдер, добавляя теги списка:
$optionrat .= "

Слайд 11

Задание 2. Для профессионалов

При повторном вызове формы хорошо помнить выбранный элемент списка:
$optionrat

Задание 2. Для профессионалов При повторном вызове формы хорошо помнить выбранный элемент
.= "";

Слайд 12

Задание 2

При построении запроса для выбора фильма должны срабатывать только те фильтры,

Задание 2 При построении запроса для выбора фильма должны срабатывать только те
возле которых помечены checkbox-ы. Поэтому сначала формируем начало инструкции SQL:
$sql = "SELECT `film`.`film_id`,`title`,`rental_rate`,".
"`length`,`rating`,`category_id` FROM `film`,`film_category` ".
"WHERE `film`.`film_id` = `film_category`.`film_id` ";
А затем добавляем фильтры:
if ($chcat) $sql .= " AND `category_id` = '$cat'";

Слайд 13

Задание 2

При разборе запроса просто выводим все поля через пробел и добавляем

Задание 2 При разборе запроса просто выводим все поля через пробел и
переход на новую строку:
$date = array_values($date);
for($i=0; $i{
$str_info .= $date[$i]." ";
}
$str_info .="
";

Слайд 14

Задание 3

Здесь все кнопки имеют одно имя, но разные значения.
Выбор можно построить

Задание 3 Здесь все кнопки имеют одно имя, но разные значения. Выбор
через switch
switch($m)
{
case 1: // Суммарная продолжительность фильмов в каждой категории
break;
case 2: // К-во фильмов по каждому прайсу
break;
case 3: // Все страны, для которых количество городов в базе > 10
break;
case 4: // top10 актеров, снявшихся в максимальном количестве фильмов

Слайд 15

Задание 3

Получение первой буквы в имени:
LEFT(`country`,1)
Для любого вычисляемого поля можно добавить альтернативное

Задание 3 Получение первой буквы в имени: LEFT(`country`,1) Для любого вычисляемого поля
имя и затем использовать его в выражениях:
$sql = "SELECT `country`, COUNT(`city_id`) cc ";
...
$sql .= "HAVING cc > 10;";

Слайд 16

Задание 4

Поскольку списки здесь взаимосвязаны (перечень городов зависит от страны), введена кнопка

Задание 4 Поскольку списки здесь взаимосвязаны (перечень городов зависит от страны), введена
ОБНОВИТЬ.
Для добавления записи в таблицу `customer` нужно иметь последний ID при добавлении в таблицу `address`:
$sql = "SELECT LAST_INSERT_ID();";
Имя файла: Запросы-с-групповыми-операциями.pptx
Количество просмотров: 35
Количество скачиваний: 0