|
|
|
| Здравствуйте!
Есть следующая таблица
Такой дурацкий смешаный принцип, при котором названия тем в форуме и сообщения хранятся в одной таблице..
Тоесть, при создании темы добавляется запись вида
id | msg | inid | topic
1 Тема
|
а при записи сообщения
id | msg | inid | topic
2 Привет 1
|
т.е. поле inid отвечает за то, в какой topic вложена тема
Вопрос: как отсортировать topic по наибольшему количеству msg в нем?
зы: просьба не тыкать на глупую структуру таблицы, изменить ее поздно, моя задача лишь добавить сию функцию в скрипт.. Совсем голова кипит | |
|
|
|
|
|
|
|
для: Le bien
(30.08.2008 в 18:39)
| | Вы не написали, что содержится в тех ячейках, которые на рисунке не заполнены.
Лучше было бы привести фрагмент дампа таблицы (структуры и данных). | |
|
|
|
|
|
|
|
для: Trianon
(30.08.2008 в 18:49)
| | Как раз ничего там и не содержится.
А именно, темы выбираются из таблицы по условию
SELECT * FROM `forum` WHERE `topic` != ''
|
а сообщения:
SELECT * FROM `forum` WHERE `inid` = $topic
|
тоесть, по этим пустым полям и образуется условие..
Дампа привести к сожалению не могу, полей там гораздо больше и помимо "тем" присутствуют еще "форумы" и т.д.
Мне самому вопрос уже начинает казаться бредовым.. | |
|
|
|
|
|
|
|
для: Le bien
(30.08.2008 в 18:55)
| | По сути вопрос сводится к:
Выбрать topic, сортируя по условию "от большего числа msg, для которых inid равно topic" | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: Trianon
(30.08.2008 в 19:10)
| | Что то не то..
Не пойму, почему msg нигде в запросе не фигурировала? | |
|
|
|
|
|
|
|
для: Le bien
(30.08.2008 в 19:46)
| | Можете написать COUNT(msg) вместо COUNT(id)
Это ни на что не повлияет. | |
|
|
|
|
|
|
|
для: 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
|
а тема - статус "Закрыта" :) | |
|
|
|