Member 14109043 Ответов: 3

Как я могу считать по SQL ? ( Афиша системы чата )


[ инструкция SQL ]
Привет Кодерам !

Небольших трудностей, чтобы достичь :
таблица, о которой идет речь : "беседа"
поле :
(Инт ) | идентификатор объекта ( авто ВКЛ ) | происхождения ( инт )| текст ( текст )
================================================================

в этой таблице хранятся разговоры только между 2 пользователями ( это только чат 1 к 1 )
Исходное и целевое поля связаны с пользовательской таблицей ( это внешние ключи ) для обоих говорящих людей.

оператор sql, который я пытаюсь написать, позволяет подсчитать все разговоры, хранящиеся в таблице conversation.

Что я уже пробовал:

Я нахожусь в этом месте как первая попытка :

"SELECT COUNT(DISTINCT TARGET) AS TOTAL FROM CONVERSATION GROUP BY ORIGIN"


Я должен знать, уместен я или нет...
и ищите для этого лучший или самый короткий sql оператор

Есть идеи ?
Заранее спасибо ! ;)

CHill60

Запустите свой код и посмотрите, что произойдет. В чем же проблема?

3 Ответов

Рейтинг:
8

Maciej Los

Цитата:
оператор sql, который я пытаюсь написать, позволяет подсчитать все разговоры, хранящиеся в таблице conversation


Если вы хотите посчитать все разговоры:
SELECT COUNT(*)  AS CountOfAll
FROM Conversation;


Если вы хотите посчитать все разговоры на Origin поле:
SELECT Origin, COUNT(*) AS CountOfOrigin
FROM Conversation
GROUP BY Origin;


Если вы хотите посчитать все разговоры на Target поле:
SELECT [Target], COUNT(*) AS CountOfTarget
FROM Conversation
GROUP BY [Target];


Для получения более подробной информации о фуртере, пожалуйста, смотрите: MySQL :: MySQL 8.0 Справочное Руководство :: 3.3.4.8 Подсчет Строк[^]


MadMyche

+5 (3 часа назад)

Maciej Los

Спасибо.
Я догадался, что это ты. ;)

Member 14109043

функция "select COUNT(*) AS CountOfAll FROM Conversation" учитывает не весь разговор, а все строки в таблице "разговор".
то, что я ищу, - это подсчитать весь разговор, зная, что разговор происходит между пользователем 1 и пользователем 2, а источник и цель могут быть от пользователя 1 к пользователю 2 или от пользователя 2 к пользователю 1.
Спасибо Мацей Лос

Maciej Los

Кажется, @MadMyche угадал ваше намерение.

Рейтинг:
2

Member 14109043

Всем привет !
Хорошие Новости !
Мне удается избежать redondant ORIGIN и нацелиться следующим образом :
необходим дополнительный запрос :

SELECT COUNT(DISTINCT TARGET) AS TOTAL FROM CONVERSATION WHERE ORIGIN IN (SELECT DISTINCT TARGET FROM CONVERSATION)


Теперь это точно !

Спасибо всем !


CHill60

Таким образом, вы хотели только подсчитать целевые разговоры, где инициатор был целью разговора - то есть не считать разговоры, где кто-то начал разговор и еще не получил ответа. Интересный сценарий.

Maciej Los

Если это решит вашу проблему, пожалуйста, отметьте этот ответ как решение, чтобы удалить ваш вопрос из списка без ответа.
5 за ваши усилия.

Рейтинг:
1

MadMyche

И если вы ищете количество между 2 конкретными пользователями...

SELECT Count(*)
FROM   Conversation
WHERE  (Origin = @User1 AND [Target] = @User2)
OR     (Origin = @User2 AND [Target] = @User1)


Maciej Los

Вот это да!

MadMyche

Спасибо; не могу точно сказать, чего хотел плакат.

Member 14109043

да, я использую этот запрос с "select*", чтобы загрузить разговор между двумя пользователями.
спасибо ;)

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