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

Форум MySQL

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

 

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

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

тема: Двух табличный запрос на выборку
 
 автор: mihdan   (25.09.2008 в 13:58)   письмо автору
 
 

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 в 16:41)   письмо автору
 
   для: mihdan   (25.09.2008 в 13:58)
 

up

  Ответить  
 
 автор: mihdan   (26.09.2008 в 15:30)   письмо автору
 
   для: mihdan   (25.09.2008 в 16:41)
 

Trianon, помогите

  Ответить  
 
 автор: Trianon   (26.09.2008 в 16:01)   письмо автору
 
   для: mihdan   (25.09.2008 в 16:41)
 

И Вы хотите сделать это одним запросом?
Врядли выйдет... врядли выйдет более оптимально, чем несколькими.

Что до Вашего запроса, то вот эти две строки
            FROM    `{$cfg['db']['prx']}themes`    AS    t,
                    `{$cfg['db']['prx']}news`    AS    n 

(а точнее - запятая в конец первой) мне непонятны.

  Ответить  
 
 автор: mihdan   (26.09.2008 в 17:45)   письмо автору
 
   для: Trianon   (26.09.2008 в 16:01)
 

>Что до Вашего запроса, то вот эти две строки (а точнее - запятая в конец первой) мне непонятны.

Именга таблиц при многотабличном запросе разделяются запятой. Или я тут не прав. Вы меня ажно напугали.

Спасибо за ответ-так и думал что проще сделать несколько запрос, нежели все в один сунуть.
Встает параллельный вопрос, тогда как правильнее?

Цикл в цикле (выбрать все темы, выбрать все новости с ИД этой темы)

Или есть более рациональное решение по оптимизации кода.

Никогда не думал над этим вопрос, но тут проект с очень большой посещаемостью, быстродействие превыше всего.

Заранее благодарен

ЗЫ: может стоит извлечь в один массив темы в другой новости и работать с массивами, нежели в цикле делать запросы

  Ответить  
 
 автор: Trianon   (26.09.2008 в 17:57)   письмо автору
 
   для: mihdan   (26.09.2008 в 17:45)
 

>Именга таблиц при многотабличном запросе разделяются запятой. Или я тут не прав. Вы меня ажно напугали.

Неправы.

>Спасибо за ответ-так и думал что проще сделать несколько запрос, нежели все в один сунуть.
>Встает параллельный вопрос, тогда как правильнее?
>Цикл в цикле (выбрать все темы, выбрать все новости с ИД этой темы)

Зачем все новости? Только последние четыре, как я понял. Их и запрашивать.

>Или есть более рациональное решение по оптимизации кода.

как я понимаю, есть три подхода.
Первый - выше - с числом запросов 1+число тем.
Второй - по числу запрошенных срезов. Вы вроде хотите получить четыре среза с каждой темы ( в начале хотели три).
Третий - один запрос на всё.

Второй (и особенно третий) мне представляются менее оптимальными.
Но я могу и ошибаться. Попробуйте сравнить.

>Никогда не думал над этим вопрос, но тут проект с очень большой посещаемостью, быстродействие превыше всего.
>ЗЫ: может стоит извлечь в один массив темы в другой новости и работать с массивами, нежели в цикле делать запросы
пробуйте, сравнивайте. Насчет массива тем в другой новости я не понял.

  Ответить  
 
 автор: mihdan   (28.09.2008 в 14:40)   письмо автору
 
   для: Trianon   (26.09.2008 в 17:57)
 

Спасибо. Реализовал по второму варианту

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

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