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

Форум MySQL

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

 

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

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

тема: Сортировка по двум таблицам.
 
 автор: Unknown   (20.07.2007 в 15:26)   письмо автору
 
 

При выводе данных из таблицы topics нужно их сортировать по таблице posts.
Т.е. если в таблице posts появилась навоя запись, то тема, к которой относится пост должна поднятся вверх.
Я пробовал

SELECT topics.*, posts.id AS pid
FROM topics, posts
ORDER BY pid DESC

но это не работает.

   
 
 автор: cheops   (20.07.2007 в 16:00)   письмо автору
 
   для: Unknown   (20.07.2007 в 15:26)
 

>При выводе данных из таблицы topics нужно их сортировать по таблице posts.
Не понятно по какому полю должна проводиться сортировка...

   
 
 автор: Unknown   (20.07.2007 в 16:28)   письмо автору
 
   для: cheops   (20.07.2007 в 16:00)
 

По полю id из таблицы posts.

   
 
 автор: Trianon   (20.07.2007 в 17:13)   письмо автору
 
   для: Unknown   (20.07.2007 в 15:26)
 

У Вас таблицы не связаны никаким условием. Напишите условие соединения таблиц, иначе получите кашу.

   
 
 автор: Unknown   (20.07.2007 в 17:30)   письмо автору
 
   для: Trianon   (20.07.2007 в 17:13)
 

Table `posts` :
`id` - уникальный ключ
`post` - сообщение
`tid` - внешний ключ, определяет к какой теме относится пост
`time` - time of added
- - - - -
Table `topics` :
`id` - primary key
`topic` - topic name
- - - - - -
Хочу сделать сортировку тем по уникальным ключам сообщений.

   
 
 автор: Woland   (20.07.2007 в 17:37)   письмо автору
 
   для: Unknown   (20.07.2007 в 17:30)
 


SELECT topics.*, posts.id AS pid 
FROM topics, posts 
where topics.id=posts.tid
ORDER BY pid DESC

   
 
 автор: Unknown   (20.07.2007 в 17:45)   письмо автору
 
   для: Woland   (20.07.2007 в 17:37)
 



SELECT topics.*, posts.id AS pid  
FROM topics, posts  
where topics.id=posts.tid 
ORDER BY pid DESC




Если последние 5 постов относятся к одной теме, то она будет повторятся 5 раз.

   
 
 автор: Woland   (20.07.2007 в 18:04)   письмо автору
 
   для: Unknown   (20.07.2007 в 17:45)
 

Как я понимаю, тогда должна появиться последняя запись, а предыдущие просто сместятся вниз? Тогда стоит попробовать

SELECT topics.*, posts.id AS pid  
FROM topics, posts  
where topics.id=posts.tid 
group by topics.id
ORDER BY pid DESC

   
 
 автор: Unknown   (20.07.2007 в 18:11)   письмо автору
 
   для: Woland   (20.07.2007 в 18:04)
 

>Как я понимаю, тогда должна появиться последняя запись, а предыдущие просто сместятся вниз? Тогда стоит попробовать
>

>SELECT topics.*, posts.id AS pid  
>FROM topics, posts  
>where topics.id=posts.tid 
>group by topics.id
>ORDER BY pid DESC
>

Я уже пробовал.
Тогда темы сортируются в порядке добавления.

   
 
 автор: Woland   (20.07.2007 в 18:16)   письмо автору
 
   для: Unknown   (20.07.2007 в 18:11)
 

>Я уже пробовал.
>Тогда темы сортируются в порядке добавления.

Не совсем понимаю, чем это отличается от необходимого результата. Что должно получиться в результате выполнения запроса?

   
 
 автор: Unknown   (20.07.2007 в 18:22)   письмо автору
 
   для: Woland   (20.07.2007 в 18:16)
 

>>Я уже пробовал.
>>Тогда темы сортируются в порядке добавления.
>
>Не совсем понимаю, чем это отличается от необходимого результата. Что должно получиться в результате выполнения запроса?

Нужно сделать как на этом форуме.
Т.е. если кто-то написал в самую последнею тему , то эта тама должна поднятся в самый верх.

   
 
 автор: Woland   (20.07.2007 в 18:53)   письмо автору
 
   для: Unknown   (20.07.2007 в 18:22)
 


SELECT topics.*, posts.id AS pid   
FROM topics, posts   
where topics.id=posts.tid  
group by topics.id 
ORDER BY topics.id DESC

У меня получилось то, что надо

   
 
 автор: Unknown   (20.07.2007 в 19:08)   письмо автору
 
   для: Woland   (20.07.2007 в 18:53)
 

>

>SELECT topics.*, posts.id AS pid   
>FROM topics, posts   
>where topics.id=posts.tid  
>group by topics.id 
>ORDER BY topics.id DESC
>

>У меня получилось то, что надо

Этот запрос можно заменить следующим:

SELECT * 
FROM topics
ORDER BY id

Вы не понимаете о чем я говорю.

   
 
 автор: Unknown   (21.07.2007 в 01:42)   письмо автору
 
   для: Unknown   (20.07.2007 в 19:08)
 

Че так тихо? :)
Trianon, ау. :)

   
 
 автор: Trianon   (21.07.2007 в 01:48)   письмо автору
 
   для: Unknown   (21.07.2007 в 01:42)
 

чиво? :)

   
 
 автор: Unknown   (21.07.2007 в 01:51)   письмо автору
 
   для: Trianon   (21.07.2007 в 01:48)
 

Как быстро откликнулись. :)
Ниче по теме сказать не можете? :)

   
 
 автор: Trianon   (21.07.2007 в 02:04)   письмо автору
 
   для: Unknown   (21.07.2007 в 01:51)
 

сейчас...

   
 
 автор: Trianon   (21.07.2007 в 02:08)   письмо автору
 
   для: Trianon   (21.07.2007 в 02:04)
 


SELECT topics.*, mpid
  FROM topics
    JOIN
      (SELECT MAX(posts.id) as mpid, topics.id as tpid
        FROM topics
          LEFT JOIN posts ON tpid=posts.tid
        GROUP BY tpid
        ) AS t2
    ON id = tpid
  ORDER BY mpid DESC

   
 
 автор: Unknown   (21.07.2007 в 12:13)   письмо автору
 
   для: Trianon   (21.07.2007 в 02:08)
 

Спасибо.
Работает...

   
Rambler's Top100
вверх

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