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

Форум MySQL

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

 

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

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

тема: Сортировка данных по условию, НЕ МОГУ УЖЕ
 
 автор: Le bien   (30.08.2008 в 18:39)   письмо автору
 
 

Здравствуйте!

Есть следующая таблица

id
msg
inid
topic


Такой дурацкий смешаный принцип, при котором названия тем в форуме и сообщения хранятся в одной таблице..

Тоесть, при создании темы добавляется запись вида

id  |  msg  |  inid  |  topic
1                               Тема

а при записи сообщения

id  |  msg  |  inid  |  topic
2    Привет    1

т.е. поле inid отвечает за то, в какой topic вложена тема

Вопрос: как отсортировать topic по наибольшему количеству msg в нем?

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

  Ответить  
 
 автор: Trianon   (30.08.2008 в 18:49)   письмо автору
 
   для: Le bien   (30.08.2008 в 18:39)
 

Вы не написали, что содержится в тех ячейках, которые на рисунке не заполнены.
Лучше было бы привести фрагмент дампа таблицы (структуры и данных).

  Ответить  
 
 автор: Le bien   (30.08.2008 в 18:55)   письмо автору
 
   для: Trianon   (30.08.2008 в 18:49)
 

Как раз ничего там и не содержится.
А именно, темы выбираются из таблицы по условию

SELECT  * FROM `forum` WHERE `topic` != ''

а сообщения:

SELECT  * FROM `forum` WHERE `inid` = $topic

тоесть, по этим пустым полям и образуется условие..

Дампа привести к сожалению не могу, полей там гораздо больше и помимо "тем" присутствуют еще "форумы" и т.д.

Мне самому вопрос уже начинает казаться бредовым..

  Ответить  
 
 автор: Le bien   (30.08.2008 в 18:58)   письмо автору
 
   для: Le bien   (30.08.2008 в 18:55)
 

По сути вопрос сводится к:

Выбрать topic, сортируя по условию "от большего числа msg, для которых inid равно topic"

  Ответить  
 
 автор: Trianon   (30.08.2008 в 19:10)   письмо автору
 
   для: Le bien   (30.08.2008 в 18:55)
 

SELECT f.*,COALESCE(cnt, 0) AS mcnt 
  FROM forum f
    LEFT JOIN 
      (SELECT inid, COUNT(id) AS cnt 
        FROM forum 
        GROUP BY inid
      ) AS tc ON f.id = tc.inid
  WHERE topic <> ''
  ORDER BY mcnt DESC 

  Ответить  
 
 автор: Le bien   (30.08.2008 в 19:46)   письмо автору
 
   для: Trianon   (30.08.2008 в 19:10)
 

Что то не то..
Не пойму, почему msg нигде в запросе не фигурировала?

  Ответить  
 
 автор: Trianon   (30.08.2008 в 19:58)   письмо автору
 
   для: Le bien   (30.08.2008 в 19:46)
 

Можете написать COUNT(msg) вместо COUNT(id)
Это ни на что не повлияет.

  Ответить  
 
 автор: Le bien   (30.08.2008 в 21:01)   письмо автору
 
   для: Trianon   (30.08.2008 в 19:58)
 

Trianon, с уверенностью назову Вас мастером SQL =)))
Ваш запрос был верным, все из за моей невнимательности - за то, к какому топику относится сообщение, в моей таблице отвечало то же самое inid (оторвать бы руки автору сего чуда..)
Запрос преобрел следующий вид:


SELECT f.*,COALESCE(cnt, 0) AS mcnt  
  FROM forum f 
    LEFT JOIN  
      (SELECT inid, COUNT(id) AS cnt  
        FROM forum  
        GROUP BY inid 
      ) AS tc ON f.inid = tc.inid 
  WHERE topic <> '' 
  ORDER BY mcnt DESC


а тема - статус "Закрыта" :)

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

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