•  
  •  
  •  
  •  
1 1 1 1 1 1 1 1 1 1 Рейтинг 5.00 (1 Голос)
Работа с вложенными запросами MySQL - 5.0 out of 5 based on 1 vote

Во время разработки ресурсов нередко вебмастера сталкиваются с необходимостью использовать информацию, представленную не только одной табличкой, а несколькими. Вы можете, естественно, создать несколько обращений к базам данных, но иногда подобный подход связан с  сложностями, а также может отличаться неудобностью. Также, при создании множества запросов, особенно при наличии крупного портала, цена разработки ресурса может существенно возрасти, при этом нельзя избавиться от падения качества и скорости работ.

Этот урок позволит нам узнать больше о вложенных запросах mysql, используя пример разработки менюшки для нашего сайта. Наш пример будет использовать вывод имен разделов меню, а в скобки будет заключаться число страниц, которые относятся к каждому разделу. Говоря иначе, мы займемся созданием двух табличек, category, и page. Табличка category будут хранить информацию о разделах меню, в разделе page - страницы.

Табличка category                               Табличка page 

 Вложенные запросы MySQL                                      Вложенные запросы MySQL

Нашей задачей является использование одного SQL-запроса для сбора информации из двух таблиц. Вывод на экран будет следующим  (имя раздела [кол-во статей в нем]):

 Вложенные запросы MySQL

Вначале приступим к рассмотрению самого запрос, потом перейдем к примеру.

SELECT (SELECT COUNT(*) FROM `page` WHERE page.category_id = category.id) as `count`, category.name FROM category

Это значит, что нами выполняется запрос для получения всех категорий (SELECTcategory.nameFROMcategory). Он отличается наличием выборки для получения количества страниц для каждой категории ((SELECTCOUNT(*) FROM `page` WHEREpage.category_id = category.id) as `count`).

Небольшой пример

Вот дамп MySQL базы:

 

CREATE DATABASE `web-now-test-base` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
USE `web-now-test-base`;
--
-- Структура таблицы `category`
--
 
CREATE TABLE IF NOT EXISTS `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;
 
--
-- Дамп данных таблицы `category`
--
 
INSERT INTO `category` (`id`, `name`) VALUES
(1, 'Уроки PHP'),
(2, 'Уроки JS');
 
-- --------------------------------------------------------
 
--
-- Структура таблицы `page`
--
 
CREATE TABLE IF NOT EXISTS `page` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `text` text,
  `category_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `category_id` (`category_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;
 
--
-- Дамп данных таблицы `page`
--
 
INSERT INTO `page` (`id`, `name`, `text`, `category_id`) VALUES
(1, 'Урок 1 - Первая программа (скрипт) на PHP', 'Текст урокаrn...', 1),
(2, 'Урок 2 - Переменные в PHP', 'Текст урокаrn...', 1),
(3, 'Урок 3 - Массивы в PHP', 'Текст урокаrn...', 1),
(4, 'Урок 1 - Первая программа (скрипт) на JavaScript', 'Текст урокаrn...', 2),
(5, 'Урок 2 - Выводим сообщения на JavaScript', 'Текст урокаrn...', 2);

 

<?php
 
/**
 * Вложенные запросы MySQL
 * @author web-now  
 */
class Request {
 
    private $_db = null;
 
    public function __construct() {
//Подключаемся к базе данных, и записываем подключение в переменную _db 
        $this->_db = new PDO("mysql:dbname=web-now-test-base;host=localhost", "root", "");
    }
 
    /**
     * Возвращает список категорий и кол-во страниц в каждой категории
     */
    public function getCategory() {
        $query = $this->_db->prepare("SELECT 
            (SELECT COUNT(*) FROM `page` WHERE page.category_id = category.id) as `count`,  
            category.name 
            FROM category"); //Выполняем вложенные запрос к базе данных
        $query->execute();
        return $query->fetchAll(PDO::FETCH_OBJ); //Возвращаем выборку из базы
    }
 
}
 
$request = new Request();
$category_arr = $request->getCategory();
foreach ($category_arr as $category) { //Обходим список категорий
    echo $category->name . " [" . $category->count . "] <br/>"; //Выводим категории на экран
}
?>

 

 

 

Портфолио
Память о Вас и Ваших близких на многие поколения
Подробнее
Прокат металла
Подробнее
Интернет-магазин кожи и меха
Подробнее
100% оригинальная парфюмерия в Москве
Подробнее
Вьетнамский ресторан премиум класса
Подробнее
Внедрение информационных систем
Подробнее
Организация международных конференций
Подробнее
Производство молочной продукции
Подробнее
Спортивный сайт
Подробнее
Интернет-магазин мебели и аксессуаров
Подробнее
Интернет-магазин электротранспорта
Подробнее
Сайт института актуальной экономики
Подробнее
Наши клиенты
Парк развлечений Boom Zoom
Алгор
Норбит
Molga Consulting
Metrotile
Нетология
Monqi
Премиум Пак
Aasha Herbals
Аджва
Салон красоты Сударушка
Пава
ТЦ &quot;Панфиловский&quot;
Фитнес Лаборатория
Система Главбух
Vanguard
GoAsia
ТЦ «Солнечный ветер»
Teledoc
Tchernov Cable
Отзывы
Благодарю компанию web-now.pro за помощь в разработке и запуске проекта POLITSECRETS.RU. Перед нами стояла задача – внедрить проект в сжатые сроки и по оптимальной цене. Порадовало то, что мне подроб...
Вера БлашенковаСекреты успешных выборов, Москва... апр.2016
Мне очень понравился подход с которым нас встретили "Ваша задача заниматься бизнесом, наша - сделать Вам представительство в сети". После этого ребята разработали полное тз на проект, мы внесли пожела...
МаксимIT-TASK, Москва... янв.2016
Работа проделана хорошо! Дизайнер и менеджер на отлично. Надеюсь на сотрудничество в дальнейшем. Есть шероховатости в деталях по задачам, но приятно сказывается оперативность и желание исправить, внес...
БруноСоциальная сеть След Жизни, Москва... янв.2016
Работой остались очень довольны. К работе подходят ответственно, аккуратно, открыто. Проект был сдан чуть раньше срока, по ходу работы возникали изменения, все они принимались безоговорочно, работа вы...
ЕвгенийМагазин текстиля, Москва... дек.2015
Сотрудничаем с 2007 года и сделали не один проект. Самое главное - команда умеет отстаивать своё мнение и постоянно развивается.
МарияМеждународные конференции, Москва... дек.2015
Спасибо всему коллективу компании! Разработали красивый и что самое главной рабочий интернет магазин! Реклама настроена и запущена, продажи идут, бизнес развивается! Нам постоянно подсказывают о новых...
ВадимИнтернет магазин Aromatic.pro, Москва... сен.2015
Большое спасибо команде за оперативность, качественные работы, отличный креатив и привлекательные цены!
Виктория, ОАО "Фармстандарт... июль.2015
Здравствуйте уважаемые партнеры! С наступающим Новым Годом! Желаю Вам дальнейшего процветания и успехов в Вашей благородной работе! С вами приятно сотрудничать! Очень благодарен Вам за своевременное о...
Сергей ЮрченкоКинотруд, Москва... дек.2014
Благодарим команду Brand Now и лично Дениса Логинова за оригинальное видение,разнообразие идей, четкость взаимодействия и безукоризненное соблюдение сроков выполнения проекта! Планируем продолжить сот...
ТатьянаBizness Linkerz... июль.2014
Компания КУН выражает благодарность за сотрудничество: непростая задача была выполнена в требуемые сроки и полностью удовлетворила заявленному ТЗ. Приятно удивила готовность Генерального директора нач...
Мария, Компания КУНhttp://www.kuhn.com/... апр.2014
Все отзывы
Добавить отзыв