В этой рубрике я хотел бы поделиться своим опытом по выводу количества заметок в категории. Бывают такие случаи, когда допустим мы создаем категории и в них записываем наши уроки, статьи, видео и прочие материалы, как говорится контейнер, в который мы помещаем материалы. Нас интересует одна вещь, как подсчитать количество материалов, в данном контейнере.
И так, все по порядку. Для начала создаем 2 таблицы, я возьму их с прошлых уроков и реализую тут на практике.
Таблица с заметками 1_news
- -- Структура таблицы `1_news` -- CREATE TABLE IF NOT EXISTS `1_news` ( `id` int(50) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `cat` int(20) NOT NULL, PRIMARY KEY (`id`), KEY `title` (`title`), FULLTEXT KEY `title_2` (`title`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=30 ; -- -- Дамп данных таблицы `1_news` -- INSERT INTO `1_news` (`id`, `title`, `cat`) VALUES (1, 'Flash Computers Intel Celeron 2.6', 1), (2, 'Flash Computers Номе Intel Pentium G620 (2.6GHz)/2Gb/500Gb/512Mb ATI HD5450/DVD-RW/Wi-Fi/450W/Win7 HP 64bit', 1), (3, 'Flash Home Mini Intel Core i3-2100 (3,10GHz)/3Gb/1Tb SATA3/1024Mb NVIDIA GT 520/DVD-RW/USB 3.0/200W/Win7 HP 64bit (syiibr)', 1), (4, 'Flash Computers Home3D Intel Core i5-2300 (2.8GHz)/4Gb/1Tb SATA3/1024Mb NVIDIA GTX 550Ti/DVD-RW/Wi-Fi/USB 3.0/550W/Win7 HP 64bit (syiibr)', 1), (5, 'Mazda RX-8', 2), (6, 'Kia Magentis II', 2), (7, 'Audi A8 (D2,4D)', 2), (8, 'HP All-in-One 3420 Pro LH165ES G530/2GB/500GB/DVD/WiFi/20"/DOS', 1), (9, 'Lenovo IdeaCentre C320 G530/2G/320Gb/HD6450-512mb/WF/Cam/Win7 st моноблок Keyboard&Mouse 20"', 1);
Таблица с категориями заметок 1_news_cat
-- -- Структура таблицы `1_news_cat` -- CREATE TABLE IF NOT EXISTS `1_news_cat` ( `id` int(10) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ; -- -- Дамп данных таблицы `1_news_cat` -- INSERT INTO `1_news_cat` (`id`, `title`) VALUES (1, 'Компьютеры'), (2, 'Машины'), (3, 'Мотоциклы');
Теперь давайте подключимся к нашей базе данных файл bd.php
<? $db = mysql_connect ("localhost", "Логин", "Пароль"); mysql_select_db ("База данных", $db); if (!$db) echo mysql_error(); ?>
После проделанных всех операций, мы создаем последний файл index.php и в нем записываем наш код по выводу количества заметок.
<?php include ("bd.php"); //подключение к базе данных $sql = mysql_query("SELECT id, title FROM 1_news_cat"); if (!$sql) { exit(); } if (mysql_num_rows($sql) > 0) { @$row=mysql_fetch_array($sql); do { $cat_articles = mysql_query("SELECT id FROM 1_news WHERE cat='$row[id]'"); // Данный запрос выбирает из базы данных отношение статей к категориям. $number = mysql_num_rows($cat_articles); echo "<table><tr>"; echo "<td>"; echo "$row[title] ($number)"; echo "</td></tr></table><br>"; } while (@$row = mysql_fetch_array($sql)); } ?>
Для начала подключаемся к базе данных, затем выводим поля id и title из таблицы категорий 1_news_cat. Проверяем переменную, если она больше 0 то выводим все данные из таблицы 1_news_cat. Затем создаем переменную $cat_articles в ней делаем запрос на выборку из таблицы 1_news, в которой находятся все заметки. Связываем таблицы через поле cat в таблицы 1_news с таблицей 1_news_cat по полю id. Записываем результаты в переменную $number. Теперь выводя в цикле строчку $row[title] ($number) мы получаем количество заметок в каждой категории.
Итог:
Запрос очень легкий и простой, правда замечал затруднения у начинающих программистов, не понимая как и что работает, связывать запрос по COUNT, думаю совершено глупая и нелепая ошибка.
Спасибо за внимание, всем удачи!