Статью писал для своего сайта, но по некоторым причинам решил все свои статьи перезалить сюда (что бы не утерять)!
Думаю все видели во многих социальных сетях такую штуку как "События у друзей".
Я хотел бы показать простейшую реализацию данной задачи...
Для этого нам нужно создать три таблицы:
--
-- Список событий
--
CREATE TABLE IF NOT EXISTS `events` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT 'Пользователь, чье событие.',
`text` text NOT NULL COMMENT 'Описание события.',
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
FULLTEXT KEY `text` (`text`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
--
-- Список друзей
--
CREATE TABLE IF NOT EXISTS `friends` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_one` int(11) NOT NULL COMMENT 'ID пользователя чей друг.',
`user_two` int(11) NOT NULL COMMENT 'ID пользователя кто друг.',
PRIMARY KEY (`id`),
KEY `user_one` (`user_one`,`user_two`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
--
-- Список пользователей сайта
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(15) NOT NULL COMMENT 'Имя пользователя',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
С таблицами вроде все! Теперь перейдем программному коду:
<?php
/* * Подключаемся к базе данных. */
mysql_connect('localhost', 'user', 'pass');
mysql_select_db('events');
/* * Указываем кодировку utf8 по умолчанию. */
mysql_query('SET NAMES utf8');
Теперь можем приступить к запросу с необычной выборкой:
<?php
$query = mysql_query("SELECT e.`text`, u.`name`
FROM `events` e, `users` u, `friends` f
WHERE f.`user_one` = {$id}
AND e.`user_id` = f.`user_two`
AND u.`id` = f.`user_two`
ORDER BY e.`id` ASC;");
И выводим результат выполнения запроса:
<?php
while ($row = mysql_fetch_assoc($query)) {
echo 'Пользователь <b>'.$row['name'].'</b>, '.$row['text'].'<br />';
}
Вот что у меня получилось:
Пользователь Вася, Добавил комментарий
Пользователь Вася, Добавил фотографию
Пользователь Вася, Удалил комментарий
Пользователь Петя, Удалил фотографию