За последние 24 часа нас посетили 16804 программиста и 1314 роботов. Сейчас ищут 1533 программиста ...

Помогите построить запрос

Тема в разделе "MySQL", создана пользователем enshtein, 30 май 2007.

  1. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    есть две таблицы вида:

    [sql]--
    -- Структура таблицы `posts`
    --
    CREATE TABLE `posts` (
    `post_id` int(11) NOT NULL auto_increment,
    `theme_id` int(11) NOT NULL default '0',
    `author` tinytext NOT NULL,
    `body` text NOT NULL,
    `attach` tinytext NOT NULL,
    `time` int(11) NOT NULL default '0',
    PRIMARY KEY (`post_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=61 ;

    -- --------------------------------------------------------

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

    CREATE TABLE `themes` (
    `theme_id` int(11) NOT NULL auto_increment,
    `forum_id` int(11) NOT NULL default '0',
    `name` tinytext NOT NULL,
    `author` tinytext NOT NULL,
    `time` int(11) NOT NULL default '0',
    `posts` int(11) NOT NULL default '0',
    `views` int(11) NOT NULL default '0',
    `last_post` tinytext NOT NULL,
    PRIMARY KEY (`theme_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=12 ;[/sql]


    это таблицы форума - темы и посты.
    Кароче надо связать две таблицы posts и themes (по полю theme_id), затем отсортировать результат вывода по полю time таблицы posts и чтобы в результате небыло повторяющихся строк с theme_id (т.е. DISTINCT theme_id)

    В итоге на ум приходит запрос вида:
    [sql]SELECT DISTINCT themes.theme_id, themes.name, themes.author, themes.posts, themes.views, themes.last_post FROM themes, posts WHERE themes.theme_id = posts.theme_id ORDER BY posts.time LIMIT 7[/sql]

    Однако результат все равно неправильный, вывод несортируется по полю time таблицы posts. Как мне правильно построить запрос господа помогите?
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    то есть надо [sql]max(posts.time) where post.theme_id=[/sql]
    ?
     
  3. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    да не в это дело, просто если поставить запрос так:
    [sql]SELECT * FROM themes, posts WHERE themes.theme_id = posts.theme_id ORDER BY posts.time DESC LIMIT 7[/sql]
    то все прекрасно работает - т.е. сортируется по полю time таблицы posts, но мне еще нужно делать DISTINCT по полю themes.theme_id - чтобы в результате небыло строк с одинаковыми значениями в поле theme_id таблицы themes и для этого я пишу запрос вида:
    [sql]SELECT DISTINCT themes.theme_id, themes.name, themes.author, themes.posts, themes.views, themes.last_post FROM themes, posts WHERE themes.theme_id = posts.theme_id ORDER BY posts.time LIMIT 7[/sql]
    При этом получая результат - но не отсортированный как мне надо
     
  4. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    т.е. при
    [sql]DISTINCT themes.theme_id, themes.name, themes.author, themes.posts, themes.views, themes.last_post[/sql]
    загадочно перестает работать часть запроса: [sql]ORDER BY posts.time[/sql]
     
  5. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    enshtein
    Если тебе надо вывести темы в порядке их обновления, то лучше в themes заведи поле theme_update_time и в него при постинге нового сообщения пиши NOW() и по нему сортируй.
     
  6. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    По времени какого поста оно должно сортировать?