Нека имаме две таблици `lessons_categories` и `lessons`. На картинката виждате двете таблици.
Нека да разсъждаваме върху картинката. На нея виждате, че няколко урока могат да са от една и съща категория. Тъй като няма да е много практично да използваме информацията от полето `cat` на таблицата `lesson_categories`, ние ще използваме id-то на категорията. Както е дадено на картинката, връзката между таблиците `lessons` и `lessons_cats` е полето lesson_id от `lessons` и полето id от `lessons_categories`. Ние може да използваме една заявка, за да определи ме кой урок към коя категория спада.
Е нека пристъпим към практическото реализиране:
Да си направим един файл init.php, който ще съдържа връзката към базата данни
Код за потвърждение: Избери целия код
<?php
mysql_connect('localhost', 'root', 'parola') or die ('No server!');
mysql_select_db('database') or die ('No database!');
mysql_query('SET NAMES UTF8');
?>
Код за потвърждение: Избери целия код
CREATE TABLE `lessons` (
`id` int(15) NOT NULL auto_increment,
`title` varchar(200) NOT NULL,
`lesson` text NOT NULL,
`lesson_id` int(15) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- Дъмп (схема) на данните в таблицата `lessons`
--
INSERT INTO `lessons` VALUES (1, 'Въведение в HTML', 'Моят първи урок за HTML', 1);
INSERT INTO `lessons` VALUES (2, 'Въведение в HTML', 'Моят първи урок за HTML', 1);
INSERT INTO `lessons` VALUES (4, 'Урок по PHP', 'Това е първият урок от серията уроци за PHP', 4);
-- --------------------------------------------------------
--
-- Структура на таблица `lessons_categories`
--
CREATE TABLE `lessons_categories` (
`id` int(12) NOT NULL auto_increment,
`cat` varchar(120) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
--
-- Дъмп (схема) на данните в таблицата `lessons_categories`
--
INSERT INTO `lessons_categories` VALUES (1, 'HTML');
INSERT INTO `lessons_categories` VALUES (2, 'CSS');
INSERT INTO `lessons_categories` VALUES (3, 'JAVA SCRIPT');
INSERT INTO `lessons_categories` VALUES (4, 'PHP');
INSERT INTO `lessons_categories` VALUES (5, 'MySQL');
Код за потвърждение: Избери целия код
<?php
include 'init.php';
$rs = mysql_query('SELECT id,cat FROM `lessons_categories` ORDER BY id');
while($row = mysql_fetch_assoc($rs))
{
print '<a href="lessons.php?lid='.$row['id'].'">'.$row['cat'].'</a><br />';
}
?>
Сега да създадем файла lessons.php, където ще показваме урока от категорията. За тази цел ние ще ползваме id-то на категорията от таблицата `lessons_categories`, което изкарахме гори при извеждането на списъка с категориите
Създаваме файла lessons.php със следното съдържание:
Код за потвърждение: Избери целия код
<?php
include 'init.php';
if(isset($_GET['lid']))
{
$lid = (int)$_GET['lid'];
}
if($lid >0)
{
$rs = mysql_query('SELECT l.title, l.lesson, c.cat FROM `lessons` AS l INNER JOIN `lessons_categories` AS c ON l.lesson_id = c.id WHERE l.lesson_id ="'.$lid.'"');
if(mysql_num_rows($rs) ==0)
{
print 'Няма добавени уроци в тази категория!';
}else{
while($row = mysql_fetch_assoc($rs))
{
print '<article>
<h1><a href="readlessons.php?id='.$row['id'].'">'.$row['title'].'</a></h1><hr />
<b>Категория: </b>'.$row['cat'].'</div><br>
'.$row['lesson'].'<br />
</article>';
}
}
}else{
header('Location: index.php');
exit;
}
?>
Код за потвърждение: Избери целия код
http://sait.com/lesson.php?lid=1
За да прихванеме стойността на този идентификатор използваме $_GET. Правим проверка ЗАДЪЛЖИТЕЛНО дали е въобще подаваме нещо през $_GET. Ако e сетната $_GET['lid'] указваме, че подадените стойности ще са само числа /прави се с цел сигурност, но това е друга тема/. След това проверяваме дали стойността е по-голяма от 0. Ако стойността е нула ние нямаме такава категория и следователно чрез хедърите връщаме потребителя в главната страница, ако е по-голяма стойността от 0 то тогава правим заявка, за да извадим съдържанието на съответния урок от категорията. За целта ще използваме в заявката едно животно INNER JOIN. Какво прави INNER JOIN? Най-просто INNER JOIN избира записите, чийто стойности съвпаднат в двете таблици.Ако стойността на поле от таблица 1 съвпадне със стойността от таблица 2 се изкарва резултата.След като е изпълнена заявката правим проверка дали са върнати записи. Ако има върнати записи вадим заглавието, категорията и съдържанието на всички уроци публикувани в съответната категория като можете да използвате substr() за да не показва целия текст от урока, а само част от него.
Резултата от изпълнението на кода трябва да е:
Както споменах по-горе ако няма зададена стойност на идентификатора lid, то потребителя ще бъде пренасочен към index.php /може към друга страница, това вие решавате/. В този файл ще се съдържа както менюто с категориите както и ще вади няколко урока от различните категории или пък всичките уроци като можете да добавите и странициране. Отново ще използваме INNER JOIN
Скрипта би могъл да се реализира така:
Код за потвърждение: Избери целия код
<?php
include 'init.php';
$rs =mysql_query('SELECT l.id,l.title, l.lesson, c.cat FROM `lessons` AS l INNER JOIN `lessons_categories` AS c ON l.lesson_id = c.id');
if(mysql_num_rows($rs) ==0)
{
print 'Няма добавени уроци!';
}else{
while($row = mysql_fetch_assoc($rs))
{
print '<article>
<h1><a href="readlessons.php?id='.$row['id'].'">'.$row['title'].'</a></h1><hr />
<b>Категория: </b>'.$row['cat'].'</div><br>
'.$row['lesson'].'<br />
</article>';
}
}
И резултата трябва да бъде:
Предполагам, че забелязахте подчертаното в синьо заглавие, това е линк, към страницата, където ще прегледаме целия урок.
И накрая остана да създадем последния файл, а именно страницата, където потребителя ще може да прочете урока.
Създаваме файла readlesson.php
Отново имаме идентификатор в лентата на браузера, абсолютно идентично с кода от lessons.php. Ето как би изглеждал скрипта във файла readlesson.php:
Код за потвърждение: Избери целия код
<?php
include 'init.php';
if(isset($_GET['id']))
{
$id = (int)$_GET['id'];
}
if($id >0)
{
$rs = mysql_query('SELECT l.title, l.lesson, c.cat FROM `lessons` AS l INNER JOIN `lessons_categories` AS c ON l.lesson_id = c.id WHERE l.id ="'.$id.'"');
if(mysql_num_rows($rs) ==0)
{
print 'Няма добавени уроци в тази категория!';
}else{
while($row = mysql_fetch_assoc($rs))
{
print '<article>
<h2>'.$row['title'].'</h2><hr />
<b>Категория: </b>'.$row['cat'].'</div><br>
'.$row['lesson'].'<br />
</article>';
}
}
}else{
header('Location: index.php');
exit;
}
?>
Това е просто пример как биха могли да се използва релацията /връзка/ между таблиците. Не е кой знае каква философия
Урока е писан лично от мен и забранявам копирането му без мое знание