|
|
|
| 2 таблицы
--
-- Структура таблицы `ua_news`
--
CREATE TABLE IF NOT EXISTS `ua_news` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`region` smallint(5) unsigned default NULL,
`theme` smallint(5) unsigned NOT NULL,
`author` smallint(5) unsigned default NULL,
`name` varchar(128) NOT NULL,
`subname` varchar(128) NOT NULL,
`date` datetime NOT NULL,
`img0` varchar(128) NOT NULL,
`img1` varchar(128) NOT NULL,
`annonce` text NOT NULL,
`content` longtext NOT NULL,
`type` enum('0','1','2') NOT NULL default '0',
`is_export` char(1) NOT NULL,
`is_vis` char(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=41 ;
-- --------------------------------------------------------
--
-- Структура таблицы `ua_themes`
--
CREATE TABLE IF NOT EXISTS `ua_themes` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`name` varchar(128) NOT NULL,
`sort` smallint(5) unsigned NOT NULL default '0',
`is_vis` char(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=22 ;
|
Нужно вывести название темы и под ней 4 последние новости из этой темы
Сейчас выглядит так:
SELECT t.id AS tid,
t.name AS tname,
CAST(t.sort AS UNSIGNED) AS natsort,
n.id,
n.name,
n.annonce,
n.img0,
DATE_FORMAT(n.date, '%d.%m.%Y') AS pdate
FROM `{$cfg['db']['prx']}themes` AS t,
`{$cfg['db']['prx']}news` AS n
WHERE t.is_vis='1'
AND n.is_vis='1'
AND n.img0<>''
AND n.type='2'
AND n.theme=t.id
ORDER BY natsort, pdate DESC
|
Но что-то не то. Помогите поправить запрос | |
|
|
|
|
|
|
|
для: mihdan
(25.09.2008 в 13:58)
| | up | |
|
|
|
|
|
|
|
для: mihdan
(25.09.2008 в 16:41)
| | Trianon, помогите | |
|
|
|
|
|
|
|
для: mihdan
(25.09.2008 в 16:41)
| | И Вы хотите сделать это одним запросом?
Врядли выйдет... врядли выйдет более оптимально, чем несколькими.
Что до Вашего запроса, то вот эти две строки
FROM `{$cfg['db']['prx']}themes` AS t,
`{$cfg['db']['prx']}news` AS n
|
(а точнее - запятая в конец первой) мне непонятны. | |
|
|
|
|
|
|
|
для: Trianon
(26.09.2008 в 16:01)
| | >Что до Вашего запроса, то вот эти две строки (а точнее - запятая в конец первой) мне непонятны.
Именга таблиц при многотабличном запросе разделяются запятой. Или я тут не прав. Вы меня ажно напугали.
Спасибо за ответ-так и думал что проще сделать несколько запрос, нежели все в один сунуть.
Встает параллельный вопрос, тогда как правильнее?
Цикл в цикле (выбрать все темы, выбрать все новости с ИД этой темы)
Или есть более рациональное решение по оптимизации кода.
Никогда не думал над этим вопрос, но тут проект с очень большой посещаемостью, быстродействие превыше всего.
Заранее благодарен
ЗЫ: может стоит извлечь в один массив темы в другой новости и работать с массивами, нежели в цикле делать запросы | |
|
|
|
|
|
|
|
для: mihdan
(26.09.2008 в 17:45)
| | >Именга таблиц при многотабличном запросе разделяются запятой. Или я тут не прав. Вы меня ажно напугали.
Неправы.
>Спасибо за ответ-так и думал что проще сделать несколько запрос, нежели все в один сунуть.
>Встает параллельный вопрос, тогда как правильнее?
>Цикл в цикле (выбрать все темы, выбрать все новости с ИД этой темы)
Зачем все новости? Только последние четыре, как я понял. Их и запрашивать.
>Или есть более рациональное решение по оптимизации кода.
как я понимаю, есть три подхода.
Первый - выше - с числом запросов 1+число тем.
Второй - по числу запрошенных срезов. Вы вроде хотите получить четыре среза с каждой темы ( в начале хотели три).
Третий - один запрос на всё.
Второй (и особенно третий) мне представляются менее оптимальными.
Но я могу и ошибаться. Попробуйте сравнить.
>Никогда не думал над этим вопрос, но тут проект с очень большой посещаемостью, быстродействие превыше всего.
>ЗЫ: может стоит извлечь в один массив темы в другой новости и работать с массивами, нежели в цикле делать запросы
пробуйте, сравнивайте. Насчет массива тем в другой новости я не понял. | |
|
|
|
|
|
|
|
для: Trianon
(26.09.2008 в 17:57)
| | Спасибо. Реализовал по второму варианту | |
|
|
|