Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Мульти запрос, непонимаю...
 
 автор: Proger   (04.09.2008 в 01:42)   письмо автору
 
 

Вопрос в том как "это" соединить или сократить, а то получается 1 + колво форумов * 2 запросов только для одного вывода главной страницы. Время обработки небольшое довольно таки, но и нагрузка на сервер пока просто не велика.

Есть запрос:

SELECT cat.cid, cat.name as cname, forum.fid, forum.name, forum.desc, forum.c, COUNT( DISTINCT topic.id ) AS topics, COUNT( DISTINCT post.pid ) AS posts
FROM cat
LEFT JOIN forum ON cat.cid = forum.c AND cat.gid = forum.gid
AND cat.gid = forum.gid
LEFT JOIN post ON post.fid = forum.fid AND cat.gid = post.gid
AND cat.gid = forum.gid
LEFT JOIN topic ON post.fid = topic.fid AND cat.gid = topic.gid
AND topic.gid = forum.gid
WHERE forum.gid = 1 (например)
GROUP BY forum.name
ORDER BY forum.c, forum.fid ASC
LIMIT 0, 100


он выбирает список форумов, категорий и количество тем и сообщений в них для скрипта форума. С него я делаю главную страницу форума, но потом пришла мысль добавить например "последнее сообщение в форуме", то есть название темы, и ссылка на неё с временм последнего сообщения в ней.

и идет цикл с разбором первого запроса и в нём подзапросы пришлось сделать

$query = "SELECT aid,pid,time,tid FROM `forum`.`post` WHERE gid=".$gid." AND fid=".$id." ORDER BY `time` DESC LIMIT 0,1";
$res = mysql_query($query);
$res = mysql_fetch_assoc($res);

$q = "SELECT name FROM `forum`.`topic` WHERE id=".$res['tid'];
$r = mysql_query($q);
$r = mysql_fetch_assoc($r);

$id = ид форума который сейчас выводиться.




Структура таблиц:

--
-- Структура таблицы `cat`
--

CREATE TABLE `cat` (
  `gid` tinyint(4) NOT NULL COMMENT 'Номер группы где категория',
  `cid` tinyint(3) NOT NULL COMMENT 'Ид категории в форуме группе',
  `name` varchar(50) NOT NULL COMMENT 'Имя категории',
  `st` varchar(4) NOT NULL default 'OPEN' COMMENT 'Приватность',
  KEY `id` (`cid`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Структура таблицы `forum`
--

CREATE TABLE `forum` (
  `gid` int(5) NOT NULL COMMENT 'Номер группы гдбе форум',
  `c` tinyint(2) NOT NULL COMMENT 'Категория где этот форум',
  `fid` tinyint(2) NOT NULL COMMENT 'Ид форума в группе (не зависит от категории и считается (все форумы+1))',
  `name` varchar(50) NOT NULL COMMENT 'Название форума',
  `desc` varchar(250) NOT NULL COMMENT 'Описание форума',
  `st` enum('OPEN','CLOSED') default 'OPEN' COMMENT 'Статус/приватность форума'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Структура таблицы `post`
--

CREATE TABLE `post` (
  `gid` int(4) NOT NULL COMMENT 'Номер группы где пост',
  `fid` tinyint(4) NOT NULL COMMENT 'Номер форума где пост',
  `tid` int(4) NOT NULL COMMENT 'Номер топика, где пост',
  `pid` int(4) NOT NULL auto_increment COMMENT 'УНИКАЛЬНЫЙ для всего сайта ид поста',
  `aid` int(4) default NULL COMMENT 'Ид автора поста',
  `text` text NOT NULL COMMENT 'Текст сообщения',
  `time` datetime NOT NULL COMMENT 'Дата/время добавления сообщения в форум',
  PRIMARY KEY  (`pid`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=120 ;

--
-- Структура таблицы `topic`
--

CREATE TABLE `topic` (
  `gid` tinyint(4) NOT NULL COMMENT 'Номер группы, где топик',
  `id` tinyint(4) NOT NULL auto_increment COMMENT 'Уникальный для всего сайта ид топика',
  `fid` tinyint(4) NOT NULL COMMENT 'Ид форума, где топик',
  `aid` tinyint(4) NOT NULL COMMENT 'Ид автора топика',
  `name` varchar(100) NOT NULL COMMENT 'Название темы',
  `date` datetime NOT NULL COMMENT 'Дата создания темы',
  `lasttime` datetime NOT NULL,
  `st` enum('OPEN','CLOSE','PRIVATE','TRASH') default NULL COMMENT 'Приватность/статус темы',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=22 ;

  Ответить  
 
 автор: Proger   (04.09.2008 в 02:21)   письмо автору
 
   для: Proger   (04.09.2008 в 01:42)
 

Я так все тут сижу думаю как сделать... наверное тут не LEFT JOIN а UNION какой-нибудь... но я не уверен + с UNION не работал никогда.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования