Группировка после сортировки - Mysql

brabus9

Новичок
Группировка после сортировки - Mysql

Я выполняю группировку по полю ID, у меня получается что сначала выполняется группировка, а вот это группированное сортируется, нужно что-бы сначало сортировалось, а потом группировалось.

запрос:
SELECT FORUM_2 . * , FORUM_1.TIME
FROM FORUM_2, FORUM_1
WHERE FORUM_2.IDS = '2'
AND FORUM_1.IDS = FORUM_2.ID
GROUP BY FORUM_2.ID
ORDER BY FORUM_1.TIME DESC

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

SELECT D . *
FROM (
SELECT FORUM_2 . * , FORUM_1.TIME
FROM FORUM_2, FORUM_1
WHERE FORUM_2.IDS = '2'
AND FORUM_1.IDS = FORUM_2.ID
ORDER BY FORUM_1.TIME DESC
) AS D,
GROUP BY D.ID

но поидее лучше без подзапроса
 

brabus9

Новичок
ну что сделан подзапрос вроде правильно

-~{}~ 13.02.09 13:21:

Автор оригинала: *****
как ты себе это представляешь?
объясню
просто если убрать группировку из этого запроса, то все нормально отбирает, к примеру:

без группировки все верно:



PHP:
SELECT FORUM_2.*, FORUM_1.TIME
FROM FORUM_2, FORUM_1
WHERE FORUM_2.IDS='2'
AND FORUM_1.IDS=FORUM_2.ID
ORDER BY FORUM_1.TIME DESC

выводит список по ID

1
4
2
1
2
2
1

при этом обрабатывая php он обрабатывает весь этот список,

и окончательно выводятся темы под ID (это правильно)

1
4
2

но если применять группировку,



PHP:
SELECT FORUM_2 . * , FORUM_1.TIME
FROM FORUM_2, FORUM_1
WHERE FORUM_2.IDS = '2'
AND FORUM_1.IDS = FORUM_2.ID
GROUP BY FORUM_2.ID
ORDER BY FORUM_1.TIME DESC

то он сначало группирует, а потом сортирует и получается:

4
2
1

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

подзапрос сделали правильно без ошибки, но все-равно не так
выводит не правильно, так как порядок сообщений не верный
 

brabus9

Новичок
подзапрос сделали правильно без ошибки, но все-равно не так
SELECT *
FROM
(SELECT FORUM_2. * , FORUM_1.TIME F_TIME
FROM FORUM_2, FORUM_1
WHERE FORUM_2.IDS = '2'
AND FORUM_1.IDS = FORUM_2.ID
ORDER BY FORUM_1.TIME DESC
)grouped
GROUP BY grouped.ID
выводит не правильно, так как порядок сообщений не верный
 

Фанат

oncle terrible
Команда форума
ты делаешь все неправильно

какая структура таблиц и что хочешь получить
 

brabus9

Новичок
с чего ты взял что делаю не правильно, все верно щас кину структуру
 

zerkms

TDD infected
Команда форума
с чего ты взял что делаю не правильно
если бы ты делал правлильно - то у тебя не возник бы данный вопрос или ты уже сказал бы спасибо и раскланялся.
 

brabus9

Новичок
FORUM_1




ID TIME TIMEI USER IP USER_AGENT TEXT IMAGE TITLE IDS

1 1234126513 ... ... ... ... ... ... ... 1

2 1234126548 ... ... ... ... ... ... ... 2

3 1234126596 ... ... ... ... ... ... ... 2

5 1234192273 ... ... ... ... ... ... ... 1

6 1234193656 ... ... ... ... ... ... ... 2

7 1234215449 ... ... ... ... ... ... ... 4

8 1234215464 ... ... ... ... ... ... ... 1



FORUM_2


ID TIME TIMEI USER IP USER_AGENT TEXT IMAGE TITLE IDS

1 1234126513 ... ... ... ... ... ... ... 2

2 1234126548 ... ... ... ... ... ... ... 2

4 1234215449 ... ... ... ... ... ... ... 2


выполняя такой запрос

SELECT FORUM_2 . * , FORUM_1.TIME F_TIME
FROM FORUM_2, FORUM_1
WHERE FORUM_2.IDS = '2'
AND FORUM_1.IDS = FORUM_2.ID
ORDER BY FORUM_1.TIME DESC



мы выполняем вывод талички FORUM_2 отсортированной по полю TIME таблицы FORUM_1, при этом таблица 1 и 2 имеет связь по FORUM_1.IDS = FORUM_2.ID

после выполнения данного запроса получается табличка:




ID TIME TIMEI USER IP USER_AGENT TEXT IMAGE TITLE IDS F_TIME

1 1234126513 ... ... ... ... ... ... ... 2 1234215464

4 1234215449 ... ... ... ... ... ... ... 2 1234215449

2 1234126548 ... ... ... ... ... ... ... 2 1234193656

1 1234126513 ... ... ... ... ... ... ... 2 1234192273

2 1234126548 ... ... ... ... ... ... ... 2 1234126596

2 1234126548 ... ... ... ... ... ... ... 2 1234126548

1 1234126513 ... ... ... ... ... ... ... 2 1234126513



тут все верно отсортированно теперь мне нужно отгруппировать по полю ID, что-бы только были выведены зависимости только по саммым последним сообщениям, что-бы так сказать вывести темы с сортировкой, по последним сообщениям в них

тут-та что-бы оставить их мы пришли к выводу что можно так:



SELECT *
FROM
(SELECT FORUM_2. * , FORUM_1.TIME F_TIME
FROM FORUM_2, FORUM_1
WHERE FORUM_2.IDS = '2'
AND FORUM_1.IDS = FORUM_2.ID
ORDER BY FORUM_1.TIME DESC
)grouped
GROUP BY grouped.ID



то выкидывает таблицу:


- - ID TIME TIMEI USER IP USER_AGENT TEXT IMAGE TITLE IDS F_TIME

? ? 1 1234126513 ... ... ... ... ... ... ... 2 1234215464

? ? 2 1234126548 ... ... ... ... ... ... ... 2 1234193656

? ? 4 1234215449 ... ... ... ... ... ... ... 2 1234215449
 

Фанат

oncle terrible
Команда форума
ну, к примеру, с идиотского вопроса про сортировку перед группировкой
или с дурацкой обработки на PHP
и с вопроса "с чего ты взял" - тоже.

-~{}~ 13.02.09 14:53:

чем отличаются таблицы друг от друга и что лежит в поле ids?
 

brabus9

Новичок
Автор оригинала: *****
ну, к примеру, с идиотского вопроса про сортировку перед группировкой
или с дурацкой обработки на PHP
и с вопроса "с чего ты взял" - тоже.

-~{}~ 13.02.09 14:53:

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

-~{}~ 13.02.09 15:03:

Автор оригинала: *****
чем отличаются таблицы друг от друга и что лежит в поле ids?
ничем, в поле IDS, к таблице выше, к тому ID к которому принадлежит эта строчка, там выше было написанно что это связь между таблицами.
например сообщение к такой-то теме.
 

Фанат

oncle terrible
Команда форума
слава богу перешли к делу

-~{}~ 13.02.09 15:06:

я вижу , что по структуре таблицы не отличаются.
но какой-то смысл должен быть в том, что таблиц две, а не одна?
чем они различаются функционально?

"ID к которому принадлежит эта строчка" переводится на русский язык, как ID первго сообщения в теме?

-~{}~ 13.02.09 15:09:

две таблицы с одинаковой структурой - это, кстати, тоже неправильно
 

brabus9

Новичок
Автор оригинала: *****
слава богу перешли к делу

-~{}~ 13.02.09 15:06:

я вижу , что по структуре таблицы не отличаются.
но какой-то смысл должен быть в том, что таблиц две, а не одна?
чем они различаются функционально?

"ID к которому принадлежит эта строчка" переводится на русский язык, как ID первго сообщения в теме?

-~{}~ 13.02.09 15:09:

две таблицы с одинаковой структурой - это, кстати, тоже неправильно
у меня это сделано специально, так как у меня конференции, не имеющие строгой принадлежности, форум это, новости или лента, почему одинаковые так как данные по сути в разных слоях одинаковые, пример:

новости 2 слоя, лента 1 слой, форум 3-4 слоя, книга статьи 5-6 слоев

как раз разное количество талиц для того что-бы разделять например:

FORUM_1 слой сообщений 4 слойного форума, FORUM_2 слой тем форума и т.д. и зависимость идет по ID в верхнем IDS в нижем.

-~{}~ 13.02.09 15:25:

короче на другом форуме нашел решение

SELECT FORUM_2.* , max(FORUM_1.time) maxtime
FROM FORUM_2, FORUM_1
WHERE FORUM_2.IDS = '2'
AND FORUM_1.IDS = FORUM_2.ID
GROUP BY FORUM_2.ID
ORDER BY maxtime DESC

GROUP BY просто вела себя не правильно
 

Фанат

oncle terrible
Команда форума
это все фигня. ты не понимаешь, что такое таблица в базе данных.
это когда у тебя файлики текстовые были - ты бы делил на слои. а база данных на то и база, чтобы хранить структурированную инфорацию.
другое дело, что держать в одной таблице и форум, и новости - идиотизм.

GROUP BY просто вела себя не правильно
у тебя не найдется другой формулировки для этого предложения?
 

brabus9

Новичок
Автор оригинала: *****
это все фигня. ты не понимаешь, что такое таблица в базе данных.
это когда у тебя файлики текстовые были - ты бы делил на слои. а база данных на то и база, чтобы хранить структурированную инфорацию.
другое дело, что держать в одной таблице и форум, и новости - идиотизм.


у тебя не найдется другой формулировки для этого предложения?
у тебя болезнь на слово идиотизм, ты сам хоть не по идиотски прочти, что 4 талицы на форум, 3 талицы на то-то, 2 таблицы на то-то, а таблицы в свою очередь разделятся по слоям этих проектов. и уж поверь я прекрасно понимаю, что такое талицы

-~{}~ 13.02.09 15:51:

Автор оригинала: *****
у тебя не найдется другой формулировки для этого предложения?
найдется: Когда производится группировку по какому-то полю, остальные поля должны содержат какое-нибудь итоговое значение по группе (максимум, сумму, среднее значение, еще какое-нибудь выражение).
 

Фанат

oncle terrible
Команда форума
Судить о чужих болезнях у тебя судилка не еще выросла.
Я верю всегда только собственным глазам.
У тебя идиотская структура базы данных.
У форума не должно быть слоев. Форум должен быть в одной таблице. Или в двух, но разной структуры. А структура новостей не должна копировать структуру форума.

-~{}~ 13.02.09 15:58:

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

brabus9

Новичок
Автор оригинала: *****
Судить о чужих болезнях у тебя судилка не еще выросла.
Я верю всегда только собственным глазам.
У тебя идиотская структура базы данных.
У форума не должно быть слоев. Форум должен быть в одной таблице. Или в двух, но разной структуры. А структура новостей не должна копировать структуру форума.

-~{}~ 13.02.09 15:58:

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