|
|
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
Вечер добрый. Нужно хранить двусторонний чат сайта в базе. Вначале подумалось - да тут делать нечего и наваял: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Начал писать запросы - не тут-то было. С этой таблицы мне нужно получать: 1. для notification bar: Id и количество пользователей (не сообщений), от которых имеются непрочитанные сообщения. (получилось вроде нормально) Код: sql 1. 2. для recent activity list: список последних N пользователей с количеством непрочитанных сообщений с которыми общался, отсортированный по: 1. непрочитанные, 2. последине по дате (как в скайпе recent list) (тут придумывается что-то уродливое) 3. для chat room: список сообщений в хронологическом порядке начиная с конца в количестве N, либо начиная с первого непрочитанного (что больше) (тут тоже ничего хорошего не придумывается) Вопросы: 1. грамотная ли структура ( с точки зрения постоянных инсертов, и вышесказанных селектов) 2. если да то как-бы похитрее ответить на предыдущие 3 вопроса, учитывая что селекты будут гонятся из EntityFramework. С уважением. Ашот. Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 23:31 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
согласен с переносом темы........ сразу не смекнул куда постить..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 01:42 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
karapetyan_a, Стуктура как структура. Делайте count по нужным условиям. Что смущает-то? Непонятно. Да! Еще на индексы обратите внимание и все будет отлично! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 08:38 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
karapetyan_a1. грамотная ли структура ( с точки зрения постоянных инсертов, и вышесказанных селектов) Нет, ведь индексы отсутствуют. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 11:40 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
Arm79, Может я не четко ворпрос задал. Понятно что должны быть индексы. проблема при такой таблице с селектами. к примеру как выбрать из таблицы список последних сообщений? причем начать надо с первого непрочитанного, либо с последние 10 (смотря что больше). последние 10 можно легко получить к примеру так: Код: sql 1. а что если первое непрочитанное сообщение не входит в последюю десятку?....... тут надо найти ид первого непрочитанного сообщения и взять все что больше.......... но хотелось бы как-то похитрее одним селектом все ворпосы решить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 15:20 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
Не? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 15:55 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
Arm79, Спасибо, не знал разницу между UNION и UNION ALL в итоге вот так вот получилось: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Осталось Recent user list сообразить, ща над этим подумаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 19:17 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
karapetyan_aОсталось Recent user list сообразить, ща над этим подумаю. Так наверное Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 22:02 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
Arm79, сейчас посмотрю Ваш ответ, а пока вот что натворил для ресент листа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. правда пришлось IsRead bit поменять на tinyint иначе мин/макс не работал по нему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 22:22 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
Arm79karapetyan_aОсталось Recent user list сообразить, ща над этим подумаю. Так наверное Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. проверил, получаю только последние не прочитанные Юзером, а задача стоит, Все - с кем юзер общался, не важно он или ему писали. (кстати слова "over(partition by m.FromUserId)" для меня не понятны, не знакомы и потому страшны....... надо в мсдн лезть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 22:29 |
|
||
|
Структура таблиц(ы) для двустороннего чата
|
|||
|---|---|---|---|
|
#18+
karapetyan_a2. для recent activity list: список последних N пользователей с количеством непрочитанных сообщений с которыми общался Как было, так и написал. Нужно все, убираем из where isread=0 и все. Ну и "and (ToUserId = @currentUserId or FromUserId = @currentUserId)" MAX () over () - это найти максимальную дату для каждого FromUserId в выборке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 22:46 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=23&tid=1540635]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 158ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...