Как сделать вывод записей из БД по категориям php?
Размещу свои функции, чтобы такие как я могли найти нормальный ответ, ибо гугл разное говорит и не всегда верное и главное это не всегда возможное для понимая начинающим.
Собственно начал изучать php, работать со справочником сложно так как не знаю как это все работает. Посему учусь методом изобретения велосипедов, чтобы понять как все работает.
Задача: админка через которую добавляешь некую запись в бд, а потом страницы на лету формируются.
И ващеее стоит ли делать как это пытаюсь я? Или есть более правильные способы
Конкретно чего сейчас не могу разобрать
то как вывести страницу с определенной категории в урле + id записи.
blog.php?categor=business?id=1 — так не работает, а вот так blog.php?id=1 работает, но для СЕО не правильно.
function categor () < //разумеется подключился $db = mysqli_connect('') or die(mysqli_connect_error());; $db->set_charset("utf8"); $categor=$_GET['categor']; $list_news=mysqli_query($db, "SELECT * FROM news WHERE categor='$categor'"); //вывел записи из нужной категории - вид blog.php?categor=business while($row = mysqli_fetch_assoc($list_news)) < echo "$row[title] "; //создал ссылку и теперь перейдя на нее все открывается вот так blog.php?id=1, а надо, чтобы и категория передавалась > > //вывод данных function news () < $db = mysqli_connect('') or die(mysqli_connect_error());; $db->set_charset("utf8"); $id = $_GET['id']; //вывести по ид $ololo = mysqli_query($db, "SELECT * FROM news WHERE "); while ( $rows = mysqli_fetch_assoc($ololo)) < echo "" . $rows[h]."
"; echo ""; echo "" . $rows[id]."
"; > > categor (); news (); Короче надо чтобы при открытии определенной записи в урле передавалась и категория.
В базе в таблице есть и id и категория и ЧПУ (Ну и в идеале если подскажите как сделать ЧПУ.)
Простой пример работы с базой данный в php. Часть 3. Новости
В этой статье я хочу рассказать о том, как можно осуществлять вывод новостей.
Начнем, как уже повелось, с постановки задачи: Необходимо создать страницу, на которой будет отображен список разделов новостей, если кликнуть по какому-либо разделу, должна открыться страница со списком новостей нужной категории. В данном списке новостей для каждой новости должно отображаться заголовок, краткое описание, автор, а также ссылка на полный текст новости.
Прежде чем перейти к написанию кода, нужно спроектировать базу данных. В базе данных мы будем хранить новости и категории новостей. Нам потребуется две таблицы, первая – category, для хранения категорий новостей, она будет состоять из двух полей – id и category_name. Тут все понятно, id – первичный ключ, а name будет служить для хранения названия категорий. Вторая таблица будет создана для новостей — news. Таблица news будет состоять из полей:
Id — первичный ключ,
id_category – id категории из таблицы category,
title — заголовок,
small_text – краткое описание,
text – полный текст новости,
author – автор новости.
Поскольку таблица news использует в своем поле id_category id из таблицы category, нам необходимо связать две таблицы ключом.
Для создания этих таблиц Вы можете воспользоваться sql-патчем. Помимо создания таблиц и связей, патч создаст несколько записей.
CREATE TABLE `category` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; CREATE TABLE `news` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `id_category` INT(10) NOT NULL, `title` VARCHAR(255) NOT NULL, `small_text` TEXT NOT NULL, `text` TEXT NOT NULL, `author` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; ALTER TABLE `news` ADD CONSTRAINT `FK_news_category` FOREIGN KEY (`id_category`) REFERENCES `category` (`id`); INSERT INTO `category` (`category_name`) VALUES ('category_1'); INSERT INTO `category` (`category_name`) VALUES ('category_2'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (1, 'title1', 'small_text1', 'text1', 'author1'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (2, 'title2', 'small_text2', 'text2', 'author2'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (2, 'title3', 'small_text3', 'text3', 'author3');
Теперь приступим к написанию кода. Начнем с того что создадим файл db_connection.php. В этом файле будет содержаться код для подключения базы данных. И теперь при необходимости подключить базу данных, вместо нескольких строк кода, мы будем просто подключать один файл. А вот и код этого файла:
Теперь давайте создадим страницу, на которой будет отображаться список категорий новостей, за эту страницу бедет отвечать скрипт index.php, а вто и его код:
/* * вывод списка категорий * в списке сразу создаем ссылку на страницу, * где будет отображаться список статей той или иной категории */ foreach($rows as $row) < ?>">
?>
Теперь давайте создадим файл news_list.php – этот файл будет отвечать за список новостей. Ниже приведен его код:
else < $sqlQuery = " SELECT * FROM `news`; "; >// делаем запрос к бд и получаем новости $sql = mysql_query($sqlQuery) or die(mysql_error()); $rows = array(); while($r = mysql_fetch_array($sql, MYSQL_ASSOC)) < $rows[] = $r; >/* * вывод списка новостей * в списке сразу создаем ссылку на страницу, * где будет отображаться полная новость */ foreach($rows as $row) < ?> Author: ">Read more
?>
Теперь создадим файл news.php, он будет отвечать за страницу с полным текстом новости. Вот код этого файла:
foreach($rows as $row) < ?> Author: >else < echo "News not found"; >?>
Все готово. Исходники можете скачать тут.
Вывод из таблицы БД новостей по категориям.
Здравствуйте! Подскажите пожалуйста, как это реализовать:
Таблица состоит из 3 полей: id, cat и novost
В поле cat одна цифра 1 или 2.
В поле novost находится текстовая новость.
Нужно выводить на экран новости по категориям.
Если в столбике cat стоит цифра 1, то выводим novost которая в поле с этим значением.
Если в столбике cat стоит цифра 2, то выводим novost которая в поле с этим значением.
Не получается реализовать вывод новостей по категориям
Помогите, выдает ошибку, не выводит новости по категориям, выводит только на главной. На остальные.
Приставки в названиях для новостей по категориям
Здраствуйте уважаемые форумчане! Ищу хак для DLE, который добавит приставки в каждую новость по.
Постраничный вывод новостей из таблицы
Дали такое задание: В базе данных MySQL существует таблица news (дамп таблицы — в файле news.sql).
Сообщение от ilikesmile 
Например 100 новостей, две категории: интересные (cat=1) и не интересные (cat=2). Поле cat как бы идентификатор новости, а сама новость в соседнем поле.
Добавлено через 39 минут
Наверно, мой пример не очень удачен и ясно высказан. Попробую так:
На странице две ссылки: «Хорошие новости» и «Плохие новости».
Как можно разделить новости по этим категориям? В таблице два поля : id и novost. Все новости и хорошие и плохие находятся в вперемешку в одном столбике novost.
Возможно расставить самому идентификаторы на «плохие» и «хорошие» новости и выводить их отдельно, а не все кучей ?
Подсказали, как вариант, можно сделать плохим новостям — отдельное поле и хорошим новостям — отдельное поле в таблице , и выводить только эти столбики.
А если категорий будет 20? Это надо делать 20 полей.
Как вариант:
создать две функции bad_news() и good_news() которые возвращают массив новостей
В одной создать следующий запрос:
$query = "SELECT * FROM news WHERE cat = 1";
$query = "SELECT * FROM news WHERE cat = 2";
$bad_news = bad_news(); $good_news = good_news();
Сообщение от Kenny7423 
Можно поподробней как это сделать?
Добавлено через 2 часа 5 минут
Сделал три таблицы bed, good, novost
В таблицу bed поместил все плохие новости
В таблицу good хорошие
Таблица novost пока пустая
Нажимая в браузере «плохие новости» идёт соединение с таблицей bed и отображаются плохие новости.
Нажимая в браузере «хорошие новости» идёт соединение с таблицей good и выходят хорошие новости.
Как сделать, что бы в таблицу novost заносились новости из таблицы bed и таблицы good ?
Таблица novost выводиться на главной странице, и занося новость в таблицу bed или good эта новость будет и на главной странице.
Добавлено через 2 часа 20 минут
Опять переделал таблицу, как в начале стала: три поля id, cat, novost
в cat заношу цифру 1 это плохая новость
цифру 2 хорошая новость
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/* выводить поле novost таблицы news где поле cat='1'*/ $result = mysql_query ("SELECT novost FROM news WHERE cat='$cat'",$db); $cat="1"; /* заносим в массив $myrow */ $myrow = mysql_fetch_array ($result); do { /* выводим на экран */ printf ($myrow["novost"]); } /* делаем до тех пор, пока не закончиться $result */ while ($myrow = mysql_fetch_array ($result));
А если новость относиться и к хорошей и плохой, надо вывести её и категории плохой и хорошей. Значит в одном поле должна стоять цифра 1 и 2, ставлю в поле сat 1 2 не выводиться не та не другая.
Пробовал 1,2 и 1;2
Как сделать, что бы $cat выбирала нужное значение из поля, где несколько цифр.
Php новости по категориям
Здравствуйте,
создаю новостной архив. Наткнулся на проблему, мне собственно алгоритм нужен.
Использую значит 2 таблицы.
1)Таблица category
SELECT id , name_$ln , color FROM category WHERE parent = 0 // тут все верно, выдет следующее:
+—-+—————+———+
| id | name_ru | color |
+—-+—————+———+
| 1 | Политика | d61d00 |
| 2 | Экономика | 8f1ab6 |
| 3 | Спорт | 0061a6 |
| 4 | Культура | d1008b |
| 5 | Происшествие | 008000 |
+—-+—————+———+
SELECT category . name_$ln , news . title , news . category , color , parent
FROM news
JOIN category ON category . id = news . category
WHERE date = ‘».$date.»‘
AND language = $lang
LIMIT 0 , 200
+—————-+————————————————————————————+———-+———+———+
| name_ru | title | category | color | parent |
+—————-+————————————————————————————+———-+———+———+
| Политика | ггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггг | 1 | d61d00 | 0 |
| Россия | ззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззз | 14 | 8c1300 | 1 |
| Происшествие | рррррррррррррррррррррррррррррррррррррррррррррррррррррр | 9 | f00 | 0 |
| Политика | мммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммм | 1 | d61d00 | 0 |
| Кино | тттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт | 35 | 005400 | 5 |
| Спорт | сссссссссссссссссссссссссссссссссссссссссссссссссссссссссс | 4 | d1008b | 0 |
| Кредит | уууууууууууууууууууууууууууууууууууууууууууууууууу | 27 | 004678 | 3 |
.
В последней таблице, те у которых parent = 0 это основные категории. А остальные суб-категории.
Надо чтобы выводились основные категории, и под каждой категорией титлы новостей и при этом титлы суб-категорий чтоб тоже присутствовали соответственно. Я делаю так:
$res_cat_name = mysql_query ( «SELECT id, name_ $ln , color FROM category WHERE parent = 0» );
$res_news = mysql_query ( «SELECT category.name_ $ln , news.title, news.category, color, parent
FROM news
JOIN category ON category.id = news.category
WHERE date = ‘» . $date . «‘
AND language = $lang
LIMIT 0, 200
» );
$catid = — 1 ;
while( $news = mysql_fetch_array ( $res_news ))
$cat = mysql_fetch_array ( $res_cat_name );
if ( $news [ «parent» ] != 0 )
$catid = $news [ «parent» ];
> else
$catid = $news [ «category» ];
>
if (!isset( $news [ $catid ]))
$news = array();
> else
echo $news [ $catid ]; echo «
» ;
>
>
Но не совсем получается. Помогите пож-та, предложите алгоритм, а то никак не могу понять как сделать.