Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка к курсовой работе на тему Проектирование и реализация базы данных для Видеогалереи.doc
Скачиваний:
43
Добавлен:
20.05.2014
Размер:
130.05 Кб
Скачать
  1. Получение кода sql

CREATE TABLE users (

idu INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

name VARCHAR(50) NOT NULL,

year YEAR NOT NULL,

PRIMARY KEY(idu)

)

ENGINE = MYISAM

CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE files (

idf INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

idu INTEGER UNSIGNED NOT NULL,

name VARCHAR(100) NOT NULL,

size DOUBLE UNSIGNED,

format VARCHAR(5) NOT NULL,

PRIMARY KEY(idf, idu)

)

ENGINE = MYISAM

CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE video (

idv INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

idf INTEGER UNSIGNED NOT NULL,

name VARCHAR(100) NOT NULL,

description TEXT NULL,

duration INTEGER UNSIGNED NULL,

date DATE NULL,

publication BOOL NOT NULL DEFAULT 0,

fps INT(2) UNSIGNED DEFAULT 0,

keyint INT(3) UNSIGNED DEFAULT 0,

abitrate INT(3) UNSIGNED DEFAULT 0,

vbitrate INT(4) UNSIGNED DEFAULT 0,

srate INT(5) UNSIGNED DEFAULT 0,

PRIMARY KEY(idv, idf)

)

ENGINE = MYISAM

CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE albums (

ida INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

idu INTEGER UNSIGNED NOT NULL,

name VARCHAR(100) NOT NULL,

description TEXT NULL,

PRIMARY KEY(ida, idu)

)

ENGINE = MYISAM

CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE video_has_alb (

idu INTEGER UNSIGNED NOT NULL,

idv INTEGER UNSIGNED NOT NULL,

ida INTEGER UNSIGNED NOT NULL,

PRIMARY KEY(idu, idv, ida)

)

ENGINE = MYISAM

CHARACTER SET utf8 COLLATE utf8_general_ci;

  1. Реализация, sql-запросы

Функция получения информации о пользователе на языке программирования PHP:

function getUserInfo ($database_server, $database_user, $database_password, $database_name, $user) {

$mysql = new Mysql($database_server, $database_user, $database_password);

$mysql->select($database_name);

$query_1 = $mysql->query("SELECT * FROM users WHERE name='".$user."'");

if (mysql_num_rows($query_1) == 0) {

return 0;

} else {

$result_1 = mysql_fetch_object($query_1);

return $result_1;

}

unset($mysql);

}

Пример выполнения соответствующего SQL-запроса:

mysql> SELECT * FROM users WHERE name='Dmitry.Shurupov';

+-----+-----------------+------+

| idu | name | year |

+-----+-----------------+------+

| 229 | Dmitry.Shurupov | 2009 |

+-----+-----------------+------+

1 row in set (0.01 sec)

Выборка всех пользователей, у которых есть хотя бы одно опубликованное видео:

mysql> SELECT DISTINCT users.idu, users.year, users.name FROM users, video WHERE video.idu=users.idu AND video.publication=1;

+-----+------+-------------------+

| idu | year | name |

+-----+------+-------------------+

| 223 | 2009 | Andrey.Rudakov |

| 218 | 2009 | Andrey.Gavrilenko |

| 229 | 2009 | Dmitry.Shurupov |

| 236 | 2009 | Ruslan.Nurullin |

+-----+------+-------------------+

4 rows in set (0.00 sec)

Выборка идентификаторов всех альбомов пользователя с ID 223, содержащих хотя бы одно опубликованное видео:

mysql> SELECT DISTINCT ida FROM video_has_alb, video WHERE video_has_alb.idu=223 AND video_has_alb.idv=video.idv AND video.publication=1;

+-----+

| ida |

+-----+

| 37 |

+-----+

1 row in set (0.00 sec)

Выборка информации о 5-и первых (по названию) видео, опубликованных в альбоме с ID 37:

mysql> SELECT video.* FROM video, video_has_alb WHERE video_has_alb.idv=video.idv AND video_has_alb.ida=37 ORDER BY video.name LIMIT 5;

+-----+-----+----------------------------+-----------------------------+----------+------+-------------+------+--------+----------+----------+-------+-----+

| idv | idf | name | description | duration | date | publication | fps | keyint | abitrate | vbitrate | srate | idu |

+-----+-----+----------------------------+-----------------------------+----------+------+-------------+------+--------+----------+----------+-------+-----+

| 13 | 4 | Crawling | Описание видео | NULL | NULL | 1 | 30 | 300 | 64 | 300 | 22050 | 223 |

| 14 | 5 | Cure For The Itch | | NULL | NULL | 1 | 30 | 300 | 64 | 300 | 22050 | 223 |

| 12 | 6 | In The End | | NULL | NULL | 1 | 30 | 300 | 64 | 300 | 22050 | 223 |

| 15 | 7 | One Step Closer | | NULL | NULL | 1 | 30 | 300 | 64 | 300 | 22050 | 223 |

| 20 | 10 | One Step Closer (NPA 2001) | | NULL | NULL | 1 | 25 | 300 | 128 | 390 | 44100 | 223 |

+-----+-----+----------------------------+-----------------------------+----------+------+-------------+------+--------+----------+----------+-------+-----+

5 rows in set (0.00 sec)

Выборка имени файла для видео по его идентификатору (для видео с ID 13):

mysql> SELECT files.name FROM files, video WHERE idv=13 AND video.idf=files.idf;

+--------------+

| name |

+--------------+

| Crawling.avi |

+--------------+

1 row in set (0.00 sec)

Код для удаления альбома на языке программирования PHP:

if (isset($_POST['delete'])) {

$mysql = new Mysql($database_server, $database_user, $database_password);

$mysql->select($database_name);

$query_1 = $mysql->query("DELETE FROM albums WHERE idu=".$_SESSION['idu']." AND ida=".$_POST['ida']."");

unset($mysql);

}

Пример выполнения соответствующего SQL-запроса (удаление альбома #42 пользователем #229):

mysql> DELETE FROM albums WHERE idu=229 AND ida=42;

Query OK, 1 row affected (0.01 sec)

Код для добавления нового альбома на языке программирования PHP:

if ($dbflag == 0) {

$mysql = new Mysql($database_server, $database_user, $database_password);

$mysql->select($database_name);

$query_1 = $mysql->query("INSERT INTO albums (idu, name, description, date) VALUES ('".$_SESSION['idu']."','".mysql_real_escape_string(stripslashes($_POST['name']))."','".mysql_real_escape_string(stripslashes($_POST['description']))."', '".date("Ymd")."')");

unset($mysql);

}

Пример выполнения соответствующего SQL-запроса:

mysql> INSERT INTO albums (idu, name, description, date) VALUES (229, 'test', 'новый альбом', '2006-12-26');

Query OK, 1 row affected, 1 warning (0.01 sec)

Код для добавления нового альбома на языке программирования PHP:

if ($dbflag == 0) {

$query_1 = $mysql->query("UPDATE albums SET name='".mysql_real_escape_string(stripslashes($_POST['name']))."',description='".mysql_real_escape_string(stripslashes($_POST[

'description']))."' WHERE idu=".$_SESSION['idu']." AND ida=".$_POST['ida']."");

}

Пример выполнения соответствующего SQL-запроса:

mysql> UPDATE albums SET name='my test album',description='новое описание' WHERE idu=229 AND ida=42;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

Код для проверки существования файла с указанным пользователем именем в таблице video на языке программирования PHP:

if (isset($_POST['update'])) {

$query_1 = $mysql->query("SELECT * FROM video WHERE idf IN (SELECT idf FROM files WHERE files.idu=".$_SESSION['idu'].") AND name='".mysql_real_escape_string(stripslashes(

$_POST['name']))."' AND idv!=".$_POST['idv']." ORDER BY name");

if (mysql_num_rows($query_1) != 0) {

$msg = "<tr><td colspan=\"2\" class=\"Msg\">Ввидео с таким названием существует!</td></tr>";

}

}

Пример выполнения соответствующего SQL-запроса:

mysql> SELECT * FROM video WHERE idf IN (SELECT idf FROM files WHERE files.idu=229) AND name='20051117_natalie_imbruglia_concert01' AND idv!=26 ORDER BY name;

Empty set (0.01 sec)

(Поскольку результатом выборки стала пустая таблица, такое имя файла можно считать свободным для этого видео.)

Обновление информации о файле (с ID 26) в таблице video:

mysql> UPDATE video SET name='20051117_natalie_imbruglia_concert001', description='Концерт Imbruglia в Москве. 17/11/2005. Отрывок из песни "Impressed".', publication=TRUE WHERE idv=26;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

Удаление файла из таблицы video:

mysql> DELETE FROM video WHERE idv=26;

Query OK, 1 row affected (0.01 sec)

Выборка имени альбома для заданного пользователя (с ID 229) и файла с видео (ID 27):

mysql> SELECT albums.name FROM video_has_alb, video, albums WHERE albums.idu=229 and video.idv=27 and video_has_alb.ida=albums.ida and video_has_alb.idv=video.idv;

+-----------+

| name |

+-----------+

| Seen live |

+-----------+

1 row in set (0.00 sec)