Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор из одной таблицы, Групировка значений, выбор самых больших 
:(
    Опции темы
Gannibal
Дата 19.9.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: нет
Всего: 17



Добрый день, уважаемые форумчане )

есть такая вот таблица

tb_a
-------------------------------------------
a_id (primary) | a_user | a_text | a_answer (0)


а_id -> уникальное число 
а_user -> id пользователя
a_text -> сообщение пользователя
а_answer -> id ответа 

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

tb_a
-----------------------------------------------------------
a_id (primary) | a_user | a_text | a_answer (0)
-----------------------------------------------------------
1                     | 12345  | текст   | 0
2                     | 78965  | ответ  | 1


второй коментарий был ответ на первый то что нам даёт поле a_answer

в чём суть? мне нужен запрос который мне даст результат 10 коментариев с самым большим количеством ответов


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Akina
Дата 19.9.2012, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Код

select
  a_answer a_id
, COUNT(a_answer)
FROM
  tb_a
GROUP BY
  a_answer
ORDER BY 2 DESC
LIMIT 10
?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gannibal
Дата 19.9.2012, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: нет
Всего: 17



Цитата(Akina @ 19.9.2012,  10:14)
Код

select
  a_answer a_id
, COUNT(a_answer)
FROM
  tb_a
GROUP BY
  a_answer
ORDER BY 2 DESC
LIMIT 10
?

Да по ходу это оно, отпишусь ещё как наполню базу данных, для полной проверки


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Gannibal
Дата 20.9.2012, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: нет
Всего: 17



Нет этот вариант не подошёл, ещё раз обясню

Код

select
   а_text, a_answer, a_id, count(a_answer) as c_an
from 
   tb_a
group by 
   a_answer
having 
   a_answer != '0'
order by 
   c_an desc 
limit
   10


Вот почти то что мне надо, но выбирает не правельные id первоначальных постов

Я хочу что бы ме по количеству ответов на первоначальный пост сортировалось от самог обольшого к меньшему, допустим на первый пост который будет с a_answer = 0  нужно найти в этой же таблице каличество ответов где a_id = a_answer


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Akina
Дата 20.9.2012, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



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

Цитата(Gannibal @  19.9.2012,  12:00 Найти цитируемый пост)
мне нужен запрос который мне даст результат 10 коментариев с самым большим количеством ответов 

Поскольку из духа вопроса и структуры таблицы следует, что комментарий и ответ есть одно и то же, то тебе нужен запрос, который выведет самые частовстречающиеся идентификаторы из поля a_answer. Мой запрос имено это и делает. Если ещё нужен и текст - привяжи сюда вторую копию таблицы, и по идентификатору записи получи текст этой записи.

Цитата

Код

select
   а_text, a_answer, a_id, count(a_answer) as c_an
...
group by 
   a_answer


Уже бред. а_text не входит в выражение группировки - получишь отфонарный из группы.

Цитата

Код

having 
   a_answer != '0'

Тоже ерунда - каждая запись, у которой a_answer=0, уникальна, и отвалится просто на этапе сортировки. 
И потом - у тебя ИДы в тексте хранятся, что ли?




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gannibal
Дата 21.9.2012, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: нет
Всего: 17



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

Код

(
SELECT a_user, a_text, count(a_answer) as hm, a_answer as hid
FROM tb_a
WHERE a_answer!='0'
group by a_answer
)
UNION(
SELECT a_user, a_text, a_answer as hm, a_id as hid
FROM tb_a
WHERE a_answer='0'
)
ORDER BY hm desc
LIMIT 10


теперь hid дублирует значения во втором выборе, мне надо что бы те дублируемые значения встали на мести первого выбора а из второго их удалить

Добавлено через 7 минут и 49 секунд
подксажите куда копать хотя бы, в какую сторону


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Akina
Дата 21.9.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Gannibal @  21.9.2012,  15:56 Найти цитируемый пост)
теперь hid дублирует значения во втором выборе

Так и должно быть. Я уже показывал, что есть поля, которые не включены ни в выражение группировки, ни в агрегатную функцию. Теперь - учите наизусть:

Если поле включено в выходной набор, но не включено в выражение группировки или агрегатную функцию, сервер для каждой группы выберет в качестве значения для этого поля СЛУЧАЙНОЕ значение из группы, в т.ч. возможно РАЗЛИЧНОЕ при двух последовательных выполнениях запроса на одном и том же наборе входных данных.

Это - почти прямой перевод цитаты из документации.

Из этого следует простой вывод - UNION не сможет удалить дубликаты по hid, потому что он выполняет DOSTINCTROW - а именно вот эти поля со случайными значениями обеспечивают уникальность строк при вроде бы совпадающем hid.

Цитата(Gannibal @  21.9.2012,  15:56 Найти цитируемый пост)
подксажите куда копать хотя бы, в какую сторону


Как сделать правильно - я уже говорил.

Цитата(Akina @  20.9.2012,  14:55 Найти цитируемый пост)
Если ещё нужен и текст - привяжи сюда вторую копию таблицы, и по идентификатору записи получи текст этой записи.





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gannibal
Дата 21.9.2012, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: нет
Всего: 17



Цитата(Akina @  21.9.2012,  14:18 Найти цитируемый пост)
Если ещё нужен и текст - привяжи сюда вторую копию таблицы


я не профи в MySQL, можешь подсказать как привязать копию таблицы?


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Akina
Дата 21.9.2012, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Код

SELECT
  t1.*
, subq.cnt
FROM
  tb_a t1
INNER JOIN
  (
  SELECT
    t2.a_answer a_id
  , COUNT(t2.a_answer) cnt
  FROM
    tb_a t2
  GROUP BY
    t2.a_answer
  ORDER BY 2 DESC
  LIMIT 10
  ) subq
ON
  t1.a_id=subq.a_id;



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.