22 июля 2013
4772
структура вложенных запросов, php

Структура вложенных запросов - категории и материалы: PHP

PHP
Демонстрация » Скачать »

Затронем немного тему со структурой вложенных запросов, в которой будут участвовать категории и материалы. Проводить урок будем посредством языка программирования PHP. Вложенные запросы - это запросы, которые относятся к основному запросу посредством связи таблиц по определенному полю. Допустим, для простого понятия в наших примерах, будем рассматривать категории, которые в свою очередь имеют соответствующие материалы. И так приступим.

 

Первый шаг. Создание базы данных и таблиц.

 

В первую очередь давайте создадим базу данных и дадим ей название lessons. В базe данных lessons будут храниться две таблицы: с категориями  - cat и с материалами - material. В категории cat будут 2 поля id и title. В категории material будут 3 поля id, title, cat.

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

 

--
-- Table structure for table `cat`
--

CREATE TABLE IF NOT EXISTS `cat` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `cat`
--

INSERT INTO `cat` (`id`, `title`) VALUES
(1, 'Категория 1'),
(2, 'Категория 2');
--
-- Table structure for table `material`
--

CREATE TABLE IF NOT EXISTS `material` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `cat` int(2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `material`
--

INSERT INTO `material` (`id`, `title`, `cat`) VALUES
(1, 'Материал 1', 1),
(2, 'Материал 2', 1),
(3, 'Материал 3', 1),
(4, 'Материал 4', 2);

 

 

Второй шаг. Реализация трех примеров по структуре вложенных запросов. 

 

Основная задача, продемонстрировать запросы, которые будут вложены и соединены по полю cat. И так начнем. Для начала подключимся к базе данных.

 

$db = mysql_connect ("localhost", "root", "");
mysql_select_db ("lessons", $db);

 

 

Первый пример. Данный запрос выводит сначала все поля из категории, затем выводит материалы по условию: где каждой категории принадлежат определенные материалы. Ключевое условие соединения таблиц cat=$res_one[id].

 

ID: 1

Категория: Категория 1

                                             ID : 1

                                             Материал: Материал 1

                                           

                                             ID : 2

                                             Материал: Материал 2

                                             

                                             ID : 3

                                             Материал: Материал 3

 

ID: 2

Категория: Категория 2

                                              ID : 4

                                              Материал: Материал 4

 

 

$sql_one = mysql_query("select id, title from cat");
$res_one = mysql_fetch_array($sql_one);
do
{
echo"ID: $res_one[id]";
echo" Категория: $res_one[title]"; 

$sql_two = mysql_query("select id, title from material where cat=$res_one[id]"); 
$res_two = mysql_fetch_array($sql_two); 
do { 
echo"ID : $res_two[id]"; 
echo"Материал: $res_two[title]"; 
} 
while($res_two = mysql_fetch_array($sql_two)); 
} 
while($res_one = mysql_fetch_array($sql_one));

 

Второй пример. Данный запрос выводит все материалы и имеет внутренний запрос, который для каждого материала выбирает соответствующее название категории.

ID: 1

Материал: Материал 1

                                            Категория название: Категория 1

 

ID: 2

Материал: Материал 2

                                             Категория название: Категория 1

 

ID: 3

Материал: Материал 3

                                             Категория название: Категория 1

 

ID: 4

Материал: Материал 4

                                             Категория название: Категория 2

 

$sql_one = mysql_query("select material.id, material.title,
(select cat.title from cat where cat.id=material.cat) as cat
from material");
$res_one = mysql_fetch_array($sql_one);

do
{
echo"ID: $res_one[id]";
echo"Материал: $res_one[title]"; 
echo"Категория название: $res_one[cat]"; 
} 

while($res_one = mysql_fetch_array($sql_one));

 

Третий пример. Данный запрос выбирает все категории и подсчитывает каждой категории вложенность материалов. Ключевое условие соединения cat=$res_one[id].

 

ID: 1

Категория: Категория 1 (В ней расположено: 1 материал(а))

 

ID: 2

Категория: Категория 2 (В ней расположено: 4 материал(а))

 

$sql_one = mysql_query("select id, title from cat");
$res_one = mysql_fetch_array($sql_one);

do
{
$sql_two = mysql_query("select id, title from material where cat=$res_one[id]");
$res_two = mysql_fetch_array($sql_two);
echo"ID: $res_one[id]"; 
echo"Категория: $res_one[title] (В ней расположено: $res_two[id] материал(а))"; 
} 
while($res_one = mysql_fetch_array($sql_one));

 

 

Мы получили три структуры вложенных запросов по категориям и материалам, выполненных посредством языка веб-программирования PHP, надеюсь они Вам пригодятся. Спасибо за внимание! Всем удачи!