name
|
type
|
Key
|
extra
|
Таблица
классов номеров (Num_klass)
|
Id
|
integer
|
primary key
|
auto_increment
|
Name
|
varchar
(20)
|
|
|
CostDay
|
float
|
|
|
Список
гостиничных номеров(Numbers)
|
Id
|
integer
|
primary key
|
auto_increment
|
Numer
|
|
|
Klass
|
integer
|
Foreign key
|
REFERENCES Num_klass (id)
|
stage
|
integer
|
|
|
places
|
integer
|
|
|
Таблица
клиентов(Klients)
|
Id
|
integer
|
primary key
|
auto_increment
|
FIO
|
varchar(50)
|
|
|
p_point
|
varchar(50)
|
|
|
p_nomer
|
Integer
|
|
|
p_serial
|
Integer
|
|
|
p_data
|
date
|
|
|
Таблица
регистрационных действий(Reestr)
|
Id
|
integer
|
primary key
|
auto_increment
|
klient
|
integer
|
Foreign key
|
REFERENCES klients (id)
|
numer
|
integer
|
Foreign key
|
REFERENCES numbers (id)
|
data_p
|
date
|
|
|
data_ot
|
date
|
|
|
. Реализация структуры базы данных в СУБД MySQL
1. Запросы
на
создание
таблиц:
create table Num_klass (integer
primary key auto_increment,varchar(20),float
);table Numbers (integer primary key
auto_increment,varchar(10) unique,integer,integer,integer,FOREIGN KEY ( klass )
REFERENCES Num_klass (id)
);table klients
(integer primary key auto_increment, varchar(50),
pasport
varchar(50)
);
create table reestr (integer primary
key auto_increment,integer,integer,_p date,_ot date,FOREIGN KEY ( numer )
REFERENCES numbers (id),FOREIGN KEY ( klient ) REFERENCES klients (id)
);
2. Запросы
на
добавление
данных
into
num_klass(name,costday)values("Vip",10000);into
num_klass(name,costday)values("Luxe",8000);into
num_klass(name,costday)values("Premium",6000);into
num_klass(name,costday)values("Less",4000);into
num_klass(name,costday)values("Budget",2000);into
Numbers(numer,klass,stage,places)values("1408",1,5,2);into
Numbers(numer,klass,stage,places)values("1407",2,4,3);into
Numbers(numer,klass,stage,places)values("1406",3,3,4);into
Numbers(numer,klass,stage,places)values("1405",4,2,5);into
Numbers(numer,klass,stage,places)values("1404",5,1,6);into
Klients(FIO,pasport)values("Ivanov V.V.","qw2467");into
Klients(FIO,pasport)values("Petrov A.V.","evta89490");into
Klients(FIO,pasport)values("Sidorov V.A.","khskj3546");into
Klients(FIO,pasport)values("Putin V.V.","qlkj53050");into
Klients(FIO,pasport)values("Geyts Bil","f*jio967");into
Reestr(klient,numer,data_p,data_ot)values(1,1,130101,130621);into
Reestr(klient,numer,data_p,data_ot)values(2,2,130201,130321);into
Reestr(klient,numer,data_p,data_ot)values(2,2,130401,130621);into
Reestr(klient,numer,data_p,data_ot)values(3,3,130101,130621);into
Reestr(klient,numer,data_p,data_ot)values(4,4,130301,130510);into
Reestr(klient,numer,data_p,data_ot)values(4,4,130521,130621);into
Reestr(klient,numer,data_p,data_ot)values(5,5,130101,130202);into
Reestr(klient,numer,data_p,data_ot)values(5,5,130203,130303);into
Reestr(klient,numer,data_p,data_ot)values(5,5,130310,130509);into
Reestr(klient,numer,data_p,data_ot)values(5,5,130521,130621);
. Запросы
на
выборку
данных.
Выбрать из справочной таблицы наименования и
отсортировать их по двум произвольным имеющемуся в таблице признакам
Select * from klients order by
fio,pasport;
Select Numer ,places from numbers
order by stage;
Выбрать из указанной таблицы те записи, которые
удовлетворяют условию отбора (where).
Select * from reestr where
data_ot<CURRENT_DATE;
Select * from reestr where klient in
(1,2,3);
Вывести информацию подчиненной (дочерней)
таблицы, заменяя коды (значения внешних ключей) соответствующими символьными
значениями из родительских таблиц.
select k.fio, r.data_p from reestr r
inner join klients k on k.id= r.numer;
select k.name, n.numer from numbers
n inner join num_klass k on k.id= n.klass;
Привести примеры 2-3 запросов с использованием
агрегатных функций.
select count(numer) from numbers;
Выбрать из таблиц информацию об объектах,
значение произвольного атрибута в которых входит в заданный диапазон значений
(чисел или дат).
select k.fio, n.numer,
r.data_p, r.data_ot from reestr r join klients k on k.id=r.klientjoin numbers n
on n.id=r.numer(r.data_ot>Current_date) and (r.data_p<=Current_date);
Привести пример вложенных
запросов
select * from Numbers n where places
> (count(numer) from reestr r where (r.numer=n.id)and
(r.data_ot>CURRENT_DATE));
Получить список признаков для которых есть более
одной записи.
запрос триггер программный
select * from (select k.fio,
count(r.klient)as kol from reestr r left join klients k on k.id=r.klient group
by k.fio) b b.kol>2;
Реализовать процедуру
Delimiter //procedure myproc (out t
integer(11))DETERMINISTICSECURITY INVOKER‘’count(name) t from klients;;
//
Реализовать триггер
Create trigger ins_user after insert
on reestr for each row set new.createdate = Current_date; ;
Реализовать функцию
Create function getKlient (search_id
int)tinytextn tinytext;name into n from clients where id=search_id;n;;
//
Внешний вид
Рис 1. Главное окно.
Рис 2. Регистрация нового клиента.
Рис 3. Добавление нового номера.
Рис 4. Выписать счет на оплату.
Приложение
Программный код WEB-страниц
Index.php
(см. рис 1)
<?include
"base.php";
$r=ComandEnc("reestr",$_REQUEST);(isset($_REQUEST[send_mod]))
{$curid = $_REQUEST[id];
"<HTML><HEAD>
<META HTTP-EQUIV='Refresh'
CONTENT='0; URL=invoice.php?id=$curid'>
</HEAD></HTML>";
}?>
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=windows-1251" />
<title>Операции
с номерами</title>
<link rel="stylesheet"
type="text/css" href="cs.css">
</head>
<body>
<form
action="index.php" method="post"
name="input_num">
<table>
<tr>
<td>
<table border="1"
cellpadding="0" cellspacing="0">
<tr><td
colspan="2" align="center"><strong>Регистрация
заселения</strong>
<input type="hidden"
name="id" value=<? echo($r[0]) ?>>
</td></tr>
<tr><td
width="150">Клиент :</td>
<td>
<?GetPickData("select * from
Klients","",1,"klient",$r[1]);?>
<a href
="klients.php">Новый клиент</a>
</td></tr>
<tr><td
width="150">Номер :</td>
<td><?
GetPickData("select * from Numbers n where places > (select
count(numer) from reestr r (r.numer=n.id)and (r.data_ot>CURRENT_DATE));
","* from Numbers n where places <= (select count(numer) from
reestr r (r.numer=n.id)and (r.data_ot>CURRENT_DATE));",1,"numer",$r[2]);?>
<a href ="AddNum.php">Новый
номер</a> <br> </td> </tr>
<tr><td
width="150">Дата
приезда :</td>
<td><input
type="text" name="data_p" maxlength="30"
value=<? echo($r[3])?> ></td></tr>
<tr><td
width="150">Дата отъезда :</td>
<td><input
type="text" name="data_ot" maxlength="30"
value=<? echo($r[4])?> ></td>
</tr> <tr>
<td colspan="2"
align="center"><input type="submit"
name="prev" value="<<<" />
<input type="submit"
name="next" value=">>>" /><input
type="submit" name="add"
value="Добавить"></td>
</tr> <tr><td
colspan="2" align="center">
<input type="submit"
name="insert_data" value="Сохранить" />
<input type="submit"
name="delete_data" value="Удалить" />
<input type="submit"
name="send_mod" value="Счет на оплату" />
<td
colspan=4> Список
проживающих клиентов</td></tr><tr>
<td colspan = 4> <input
type="text" name="edit_search">
<input>
</td> </tr><tr><td>Клиент</td><td>Номер</td><td>Дата
приезда</td>
<td>Дата
отъезда</td></tr>
<?if (isset($_REQUEST[search]))
{$sql="select k.fio, n.numer,
r.data_p, r.data_ot from reestr r left join klients k on k.id=r.klient left
join numbers n on n.id=r.numer where (r.data_ot>Current_date) and
(r.data_p<=Current_date)and(k.fio like \"$_REQUEST[edit_search]%\"
)";
}else
$sql="select k.fio, n.numer,
r.data_p, r.data_ot from reestr r left join klients k on k.id=r.klient
left join numbers n on n.id=r.numer where (r.data_ot>Current_date) and
(r.data_p<=Current_date)";($sql , 0);?></td>
</tr></table></form></body></html>.php
<?php_reporting(0);(!isset($db))
{
$hostname = "localhost";
$username = "root";
$password = "";
_connect($hostname, $username, $password) or die ("Ошибка
коннекта!!");
$db="Hot_admin";_select_db($db)
or die (mysql_error());_query("SET NAMES 'cp1251'");_query("SET
CHARACTER SET 'cp1251'");}CheckDup($tbl,$field, $value){
$res=mysql_query("SELECT * FROM
$tbl where $field =
$value");(mysql_fetch_row($res)){1;}{0;}}GetRow($sql){mysql_fetch_row(mysql_query($sql));}RowToForm($tbl,$id)
{$db=$GLOBALS['db'];
$list_f = mysql_list_fields($db ,
$tbl);
$name_f = mysql_field_name($list_f ,
0);
$Cur=mysql_fetch_row(mysql_query("select
* from $tbl where $name_f = $id;"));$Cur;}getNext($tbl,$cur)
{$db=$GLOBALS['db'];
$list_f = mysql_list_fields($db,
$tbl);
$name_f =
mysql_field_name($list_f,0);
$res=mysql_query("SELECT
$name_f FROM $tbl WHERE $name_f>$cur ORDER BY $name_f ASC LIMIT
1");($next=mysql_fetch_row($res)){RowToForm($tbl,$next[0]);}return
RowToForm($tbl,$cur);}getPrev($tbl,$cur){
$db=$GLOBALS['db'];
$list_f = mysql_list_fields($db,
$tbl);
$name_f =
mysql_field_name($list_f,0);
$res=mysql_query("SELECT
$name_f FROM $tbl WHERE $name_f<$cur ORDER BY $name_f DESC LIMIT
1");($prev=mysql_fetch_row($res)){RowToForm($tbl,$prev[0]);}RowToForm($tbl,$cur);}insert($tbl)
{ $db=$GLOBALS['db'];
$list_f = mysql_list_fields($db,
$tbl);
$n = mysql_num_fields($list_f);
$name_f =
mysql_field_name($list_f,0);
$value =
$_POST[$name_f];(CheckDup($tbl,$name_f,$value)) {
$sql = "Update $tbl SET ";
$wh=$where= " where $name_f =
$value"; }{
$wh=" where $name_f in (select
max($name_f) from $tbl)";
$sql = "INSERT INTO $tbl SET
"; }($i = 0; $i < $n; $i++) {
$name_f =
mysql_field_name($list_f,$i);($name_f!="id")
{
$value = $_POST[$name_f];
$j = $i + 1;
$sql = $sql.$name_f." =
'$value'";($j <> $n) $sql = $sql.", ";} }(isset($where)){
$sql.=$where;}_query($sql) or
die(mysql_error());
$res=mysql_query("select * from
$tbl $wh");mysql_fetch_row($res);}View($tbl,
$NeedHead){(!stristr(strtoupper($tbl),"SELECT")) {($NeedHead)
{echo
"<b>$Tbl</b><table border=1>";
$result=mysql_query("describe
$tbl;");"<tr>";($myrow =
mysql_fetch_row($result)){"<td>$myrow[0]</td>"; }"</tr>";}
$result=mysql_query("select *
from $tbl;"); }{ $result=mysql_query($tbl);}($myrow =
mysql_fetch_row($result))
{echo "<tr>";for
($i=0; $i<count($myrow); $i++) {"<td>$myrow[$i]</td>"; }echo
"</tr>";}"</table><p>";mysql_close();}delete_record($tbl,$id)
{$db=$GLOBALS['db'];
$list_f = mysql_list_fields($db,
$tbl);
$name_f =
mysql_field_name($list_f,0);
$sql = "Delete from $tbl where
$name_f = $id";
$result=mysql_query($sql)or die
(mysql_error());
$res=mysql_query("select * from
$tbl where $name_f in (select min($name_f) from $tbl) ");return
mysql_fetch_row($res);}GetPickData($sqlActive,$sqlDisable,$field,$name,$selection)
{ echo "<select
name=\"$name\" >";
$res=mysql_query($sqlActive);($row =
mysql_fetch_row($res))
{if ($selection==$row[0])
{echo "<option selected
value=\"$row[0]\">$row[$field]</option>"; }else"<option
value=\"$row[0]\">$row[$field]</option>"; }($sqlDisable!=""){
$res=mysql_query($sqlDisable);($row
= mysql_fetch_row($res)){($selection==$row[0]) {echo "<option
disabled selected
value=\"$row[0]\">$row[$field]</option>"; }else"<option
disabled value=\"$row[0]\">$row[$field]</option>"; }}"</select>";}ComandEnc
($tbl){(isset($_REQUEST[insert_data]))
{$Num=insert($tbl);}(isset($_REQUEST[view_data])){View($tbl
,
1);}(isset($_REQUEST[delete_data])){(isset($_REQUEST[id])){$v=$_REQUEST[id];($v=="") {$v=0;}}else
$v = 0; $Num=delete_record($tbl ,
$v);}(isset($_REQUEST[next])){(isset($_REQUEST[id])){$v=$_REQUEST[id];($v=="") {$v=0;}}else
$v =
0;$Num=getNext($tbl,$v);}(isset($_REQUEST[prev])){(isset($_REQUEST[id])){$v=$_REQUEST[id];($v=="") {$v=0;}}else
$v = 0;$Num=getPrev($tbl,$v);}(isset($_REQUEST[add])){$Num="";}$Num;}?>_Numer.php
(см.
рис
3)
<?include "base.php";
$Num=ComandEnc("Numbers");?>
<html><head>
<meta
http-equiv="Content-Type" content="text/html;
charset=windows-1251" />
<title>Справочники</title>
<link rel="stylesheet"
type="text/css" href="cs.css">
</head><body>
<a href
="index.php">На главную</a>
<table border="1"
cellpadding="0" cellspacing="0">
<form
action="addnum.php" method="post">
<tr><td
colspan="2" align="center"> <strong>Информация
по
номеру</strong>
</td> </tr>
<tr><td
width="150">Номер :</td>
<td><input
type="text" name="Numer" maxlength="10"
value=<?echo($Num[1])?> ></td></tr>
<tr><td
width="150">Класс номера :</td> <td>
<?GetPickData("select * from
Num_klass","",1,"Klass",$Num[2]);?></td> </tr>
<tr><td
width="150">Этаж :</td>
<td><input
type="text" name="stage" maxlength="30"
value=<?echo($Num[3])?>></td></tr>
<tr><td
width="150">Число мест
:</td><td><input type="text" name="places"
maxlength="30" value=<? echo($Num[4])?>
></td></tr>
<tr><td
colspan="2" align="center">
<input type="submit"
name="prev" value="<<<" />
<input type="submit"
name="next" value=">>>" />
<input type="submit"
name="add" value="Добавить"
/></td></tr><tr>
<td colspan="2"
align="center">
<input type="submit"
name="insert_data" value="Сохранить" />
<input type="submit"
name="delete_data" value="Удалить" />
</td> </tr> </form></table>
<table
border=1><tr><td>№</td><td>Номер
двери</td><td>Класс
номера</td>
<td>Этаж</td><td>Колчество
мест</td><?View("Numbers"
, 0);?>
</body></html>.php (см.
рис
2)
<?include
"base.php";$r=ComandEnc("klients");?>
<html><head><meta
http-equiv="Content-Type" content="text/html; charset=windows-1251"
/><title>Операции
с
номерами</title>
<link rel="stylesheet"
type="text/css" href="cs.css">
</head><body>
<a href
="index.php">На главную</a>
<form
action="klients.php" method="post"
name="input_gost">
<table border="1"
cellpadding="0" cellspacing="0"><tr>
<td colspan="2"
align="center"><strong>Регистрация гостя </strong>
<input type="hidden"
name="id" value=<? echo($r[0]) ?>>
</td></tr><tr><td
width="150">Фамилия И.О. :</td><td>
<input type="text"
name="FIO" maxlength="20" value=<? echo($r[1])?> >
</td></tr><tr><td
width="150">Данные
документа :</td>
<td><input
type="text" name="pasport" maxlength="30"
value=<? echo($r[2])?>></td></tr><tr> <td
colspan="2" align="center">
<input type="submit"
name="prev" value="<<<" />
<input type="submit"
name="next" value=">>>" />
<input type="submit"
name="add" value="Добавить" />
</td></tr><tr><td
colspan="2" align="center">
<input type="submit"
name="insert_data" value="Сохранить" />
<input type="submit"
name="delete_data" value="Удалить" />
</td> </tr> </table><table
border=1><tr><td>№</td><td>Фамилия И.О.</td>
<td>Даные</td> <?View("klients"
, 0);?> </form></body></html>.php (см.
рис
4)
<?include "base.php";
$r=GetRow("select
r.data_p,r.data_ot,(r.data_ot-r.data_p)as kol,kl.costday from reestr r Numbers
n on n.id= r.numernum_klass kl on kl.id=r.numer" );?>
<html><head>
<title>"Счет на оплату"</title>
<meta
http-equiv="Content-Type" content="text/html;
charset=utf-8"> <style>{ width: 210mm; margin-left: auto;
margin-right: auto; border: 1px #efefef solid; font-size:
11pt;}.invoice_bank_rekv { border-collapse: collapse; border: 1px solid;
}.invoice_bank_rekv > tbody > tr > td, table.invoice_bank_rekv > tr
> td { border: 1px solid; }.invoice_items { border: 1px solid;
border-collapse: collapse;}.invoice_items td, table.invoice_items th { border:
1px solid;}
</style></head><body>
<div style="font-weight:
bold; font-size: 16pt; padding-left:5px;">
Счет № <? echo($_GET[id]) ?>
от <? echo (date( 'd.m.Y'))?></div>
<br/><table
width="100%"> <tr><td style="width: 30mm;">
<div style="
padding-left:2px;">Поставщик: </div></td> <td>
<div
style="font-weight:bold; padding-left:2px;">
____________________________________________</div></td></tr><tr>
<td style="width:
30mm;">
<div style="
padding-left:2px;">Покупатель: </div></td><td>
<div
style="font-weight:bold; padding-left:2px;">
_____________________________________________</div></td></tr></table>
<table>
<thead><tr><th>Дата
приезда</th>
<th
>Дата отъезда</th>
<th>Количество
дней</th>
<th>Цена
за день</th>
<th>Сумма</th></tr><tr>
<td style="width:27mm;
font-weight:bold; text-align:left;"><?echo($r[0])?></td>
<td style="width:27mm;
font-weight:bold; text-align:left;"><?echo($r[1])?></td>
<td style="width:27mm;
font-weight:bold; text-lign:right;"><?echo($r[2])?></td>
<td style="width:27mm;
font-weight:bold; text-align:right;"><? echo($r[3])?>
</td>
<td style="width:27mm;
font-weight:bold; text-align:right;">
<?echo($r[3]*$r[2])?></td></tr></thead><tbody
></tbody></table>
<table border="0"
width="100%" cellpadding="1"
cellspacing="1"><tr>
</tr></table><br
/><div>
Всего на сумму <?echo
($r[3]*$r[2])?>
рублей.<br />
<br /><br />
<div
style="background-color:#000000; width:100%; font-size:1px;
height:2px;"> </div><br/>
<br/>
<div>Главный
бухгалтер ______________________ (Фамилия И.О.)</div><br/>
<div style="width: 85mm;text-align:center;">М.П.</div>
<br/><div
style="width:800px;text-align:left;font-size:10pt;">Счет
действителен
к
оплате
в
течении
трех
дней.</div></body></html>.css{
font: 12px Georgia; color: #666666; }{ font-size: 16px; text-align: center; }{
width: 400px; border-collapse: collapse; margin: 0px auto; background: #E6E6E6;
}{ padding: 3px; }{ width: 150px; border: solid 1px #CCCCCC; }.tbl{width:100%;
border:0; background: #ffffff;}.small { width: 50px; border: solid 1px #CCCCCC;
}.smily { width: 10px; border: solid 1px #CCCCCC; }
Список литературы
1. Самоучитель MySQL
5. автор М.Кузнецов
2. Сайт, посвященный СУБД MySQL
. Разработка на языке PHP
. Электронная энциклопедия