Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/49: Рейтинг темы: голосов - 49, средняя оценка - 4.57
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625

Диалоги между пользователями

07.02.2014, 12:33. Показов 13751. Ответов 58

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите пожалуйста решить логическую задачу. У себя пытаюсь реализовать что-то наподобие диалогов между пользователями. Примерно как вконтакте. Итак, сделал две таблицы. Одну для диалогов, другую для сообщений. Таблица для сообщений, представлена на рисунке. Вопрос. Как построить таблицу для диалогов? Какие поля там должны быть?
Миниатюры
Диалоги между пользователями  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2014, 12:33
Ответы с готовыми решениями:

Перевод между пользователями
Доброго времени суток! Есть простенький личный кабинет(авторизация, регистрация) как добавить поля допустим для виртуальной валюты...

Сообщения между пользователями, в теории
Привет, друзья.) Меня интересует вопрос, относительно баз данных, для хранения сообщений пользователей. Каким образом, реализуют такие...

Передача данных между БД с разными пользователями
Имеется две базы данных, доступ к обоим из под разных пользователей. Нужно 4 поля из таблицы первой базы данных скопировать в таблицу...

58
71 / 71 / 13
Регистрация: 01.09.2011
Сообщений: 379
08.02.2014, 17:16
Студворк — интернет-сервис помощи студентам
Тут полностью структуру базы за вас не спланирует никто, все равно есть нюансы, которые надо вам допиливать-додумывать, это так в общих чертах.
1
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
08.02.2014, 17:19  [ТС]
Тут полностью структуру базы за вас не спланирует никто, все равно есть нюансы, которые надо вам допиливать-додумывать, это так в общих чертах.
Я понимаю.. Но мне так, дать направление, а дальше уж я сам.)) Сейчас, как раз и планирую новую структуру, основываясь на ваших советах.
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
08.02.2014, 18:10
Цитата Сообщение от zebulun Посмотреть сообщение
Это не рационально, постоянно вертеть большие json-объекты, для вставки новых сообщений, и не гибко, удалять конкретные сообщения вообще - пичаль.
Ну в общем то mysql-верчение (проход по выборке из нескольких записей) не намного гибче верчения json-объектов.
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.02.2014, 18:16
esculap_ra, а где, по-вашему, будет храниться этот json-объект? Не в оперативке?
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
08.02.2014, 21:51
Цитата Сообщение от KOPOJI Посмотреть сообщение
esculap_ra, а где, по-вашему, будет храниться этот json-объект? Не в оперативке?
А выборка из БД хранится вне оперативки?

Добавлено через 32 минуты
вариант 1: производим выборку 10 строк, потом
PHP
1
2
3
while($row=mysql_fetch_object(ссылка на ресурс)){
echo $row->name;
}
вариант 2: производим выборку 1 строки, потом
PHP
1
2
3
4
$row=mysql_fetch_object(ссылка на ресурс);
foreach($row as $r){
echo $r->name;
}
то есть, 1 вариант гибче и рациональнее? из каких соображений?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.02.2014, 21:58
esculap_ra, ну так сравните объем - сколько займет полученный результат из БД и сколько займет объект JSON.

Добавлено через 5 минут
не нравится работать с РСУБД а-ля мускула - используйте MongoDB, например. Но никак не чистый JSON, это бред. Никакой гибкости + куча лишних действий
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
08.02.2014, 22:03
Цитата Сообщение от KOPOJI Посмотреть сообщение
esculap_ra, ну так сравните объем - сколько займет полученный результат из БД и сколько займет объект JSON.
Я действительно этого не знаю. И я даже точно не представляю, но думаю, что обход ресурса в БД увеличивает число запросов к ней. или я не прав? В общем из этих соображений я и ориентируюсь. Тем более, что в новых версиях Джумлы как раз такие записи более активно используются (в ранних этого не отмечал).
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.02.2014, 22:05
Запрос с JOIN-ами - это один запрос. Раньше в джумле, наверное, использовали вложенные подзапросы в цикле, не в курсе. Сейчас, видимо, научились..
0
71 / 71 / 13
Регистрация: 01.09.2011
Сообщений: 379
08.02.2014, 22:05
Цитата Сообщение от esculap_ra Посмотреть сообщение
Я действительно этого не знаю. И я даже точно не представляю, но думаю, что обход ресурса в БД увеличивает число запросов к ней. или я не прав? В общем из этих соображений я и ориентируюсь. Тем более, что в новых версиях Джумлы как раз такие записи более активно используются (в ранних этого не отмечал).
Каких запросов? Запрос один.
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
08.02.2014, 22:33
Кстати, а кто вообще начал разговор об объектах json? Я только предложил сохранять в формате json, и фактически записи хранятся в виде массива объектов. И я не использую для их записи-извлечения json_encode, json-decode. Так кирилицу распузырит раз в 5!
0
08.02.2014, 22:37

Не по теме:

Цитата Сообщение от esculap_ra Посмотреть сообщение
Кстати, а кто вообще начал разговор об объектах json?
вы и начали.. https://www.cyberforum.ru/post5755303.html

0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
08.02.2014, 22:41
и даже не объектов, а в текстовой записи по типу json, примерно [{id:"id"},...]
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.02.2014, 22:43
Цитата Сообщение от esculap_ra Посмотреть сообщение
по типу json, примерно [{id:"id"}
ну вот. А теперь скажите, какой в этом смысл - парсить текстовые данные вместо JOIN-а по числовым индексированным полям? JSON, имхо, в чате нужен только для передачи данных между php и js. Использовать его для хранения и парсинга, имхо, бред. Как вы думаете, зачем тогда существуют функции json_encode и json_decode ?

И да, такая БД будет считаться не нормализованной.
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
08.02.2014, 23:09
я не имел в виду чисто json, и только сейчас понял что разговор пошел не в то русло.

Добавлено через 14 минут
Мне просто по ситуации пришлось вносить изменения в один движок

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public function loadObject($query)
    {
        
        $this->query($query);
                
                $row = $this->get_row(); 
                    $obj = null;
                    foreach($row as $key=>$var){
                        $obj->$key = $var;
                    }
                      $this->free();            
                
                return $obj;
 
            }
 
private function get_row($query_id = ''){
        if ($query_id == '') $query_id = $this->query_id;
 
        return mysqli_fetch_assoc($query_id);
    }
ну и дальше использую
PHP
1
2
3
4
5
6
7
8
...
$datas = $this->_db->loadObject($query);
...
 
             foreach($datas as $c)
                     {
                       $c->name .....
                     }
Просто там нужно создавать некоторые файлы .json, которые получает клиент по js-запросу. А такая форма хранения как я указал позволяет просто получить запись из БД и сразу вставлять в файл, типа
PHP
1
'{items:'.$datas->json.'}';
json - просто название поля. в котором хранятся данные

Уж извините, если сбил всех с толку!

Добавлено через 9 минут
допустим для стран и городов я создаю такие файлы из многострочных данных, а меня попросили сделать списки школ по городам, то тут нет смысла делать для каджой запись в БД. городов более 20 тысяч, и даже если там по 10 школ в каждом, то нафига мне столько записей в БД если могу запаковать в одну с привязкой к ид города. догично?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.02.2014, 23:13
Цитата Сообщение от esculap_ra Посмотреть сообщение
городов более 20 тысяч, и даже если там по 10 школ в каждом, то нафига мне столько записей в БД если могу запаковать в одну с привязкой к ид города. догично?
почитайте про реалиционные БД - что это такое, зачем используются связи, какие бывают отношения, и, в частности, про нормализацию БД. То, что вы сейчас написали, если я верно понял - пример ненормализованной БД.

Не по теме:

З.Ы. то, что вы где-то подсмотрели в движке, можно было вообще не говорить.. Редко, когда там можно найти что-то интересное, имхо..

0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
08.02.2014, 23:28
Цитата Сообщение от KOPOJI Посмотреть сообщение
в чате нужен только для передачи данных между php и js.
Сам вижу абсурдность моей версии для использования в чате. Реально в таком виде нельзя хранить данные, использующиеся для поиска, ну и в чате тоже не удобно.

Добавлено через 12 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
пример ненормализованной БД.

Не по теме:

З.Ы. то, что вы где-то подсмотрели в движке, можно было вообще не говорить.. Редко, когда там можно найти что-то интересное, имхо..

по странам и городам все путем. а ненормализацию пришлось ввести для других (на мой взгляд ненужных таблиц). А если ты имеешь в виду зачем создавать файл вместо постоянных запросов к БД? тут очевидно - js сначала запрашивает файл, а если получает ошибку загрузки (файл еще не создан), тогда посылает запрос на создание и успешно получает. и пока файл доступен для загрузки, больше запросов в БД по этому поводу не будет (маленькая такая экономия). кроме того, скачанный файл сохранится в кэше браузера (вопрос а если данные я изменил тоже решен - скачается новый файл, независимо от сохраненного в кэше), и при повторном вызове его не нужно скачивать (еще сэкономили).

а насчет подсмотрел в движке... так более гадкой реализации как в этом я еще не встречал!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.02.2014, 23:39
Цитата Сообщение от esculap_ra Посмотреть сообщение
а ненормализацию пришлось ввести для других
Пришлось ввести? Вам надо было испортить БД, что ли?
Цитата Сообщение от esculap_ra Посмотреть сообщение
А если ты имеешь в виду зачем создавать файл вместо постоянных запросов к БД? тут очевидно - js сначала запрашивает файл, а если получает ошибку загрузки (файл еще не создан), тогда посылает запрос на создание и успешно получает. и пока файл доступен для загрузки, больше запросов в БД по этому поводу не будет (маленькая такая экономия).
Ничего не понял из написанного. JS запрашивает файл? На чистом JS это доступно, насколько помню, только через костыльную реализацию. Экономия хранить все это в памяти? Да, возможно.. Но что мешает использовать Memcached или другие СУБД? Еще раз повторюсь, если хотите работать с данными в виде JSON - используйте MongoDB или аналогичные СУБД. Использовать json в чистом виде для хранения, имхо, глупо. Ни нормального поиска, ни индексов, ничего.
0
75 / 75 / 17
Регистрация: 29.11.2013
Сообщений: 262
09.02.2014, 00:41
Цитата Сообщение от esculap_ra Посмотреть сообщение
тут очевидно - js сначала запрашивает файл
Это тот, который весит over5 мегабайт?
0
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
09.02.2014, 12:54  [ТС]
По поводу своего вопроса. Мне всё же так до сих пор и не понятен один момент. Сообщения выбираем из БД так:
PHP
1
2
$from = "55"; // id диалога собеседника
$to = "77"; // id моего диалога
SQL
1
SELECT `text` FROM `tab_messages` WHERE `dialog_from_id`='$from' AND `dialog_to_id`='$to' AND `deleted`='0'
Представьте такую ситуацию. Я переписываюсь с собеседником, а затем удаляю свой диалог. В один прекрасный момент, я снова пишу ему сообщение и у меня создается новый диалог с новым id. Теперь, если учесть представленный выше вариант, мой собеседник больше не увидит мои сообщения, так как id моего диалога поменялся. Этот момент мне непонятен. Как правильно подставить данные в выборку?

Добавлено через 4 минуты
PHP
1
2
3
$to = "99"; // id моего диалога поменяется
// а все старые сообщения, будут иметь id - 77
// поэтому собеседник подставляя в выборку 99 не найдёт моих сообщений
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
09.02.2014, 19:33
Цитата Сообщение от ilikesmile Посмотреть сообщение
Это тот, который весит over5 мегабайт?
самый большой файл - города России весит 96 кил. но вы если хотите, то создавайте кучу запросов к БД чтобы получить эту информацию для связанных селектов. последовательный перебор пользователем списка стран создаст 218 запросов, и так для каждого пользователя. крупные социальные сети могут позволить себе такую роскошь - постоянные обращения к БД. в моих же разработках на первом плане - уменьшение запросов к серверу и БД. А вы тут можете язвить сколь душа пожелает...

все, я закрываю полемику на этот счет - пускай каждый останется при своем мнении, которое, разумеется, самое правильное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2014, 19:33

Организация чат-общения между 2 пользователями
Вообщем возник вопрос, как организовать общение на сайте (подобие диалогов вконтакте), между 2 пользователями? Сам сайт на php и мускул,...

Общение в виде чата между пользователями на сайте
есть ли готовые сервисы для общения зарегистрированных пользователей между собой? наподобие krible.ru zopim.com olark.com ...

Работа с пользователями
Давно витает мысль написать компоненты по работе с юзерами, а также затем оформить бандл для Symfony2 :) на данный момент начал...

Слежка за пользователями
Решил написать простую слежку за пользователями: class ViewStats { private static $stats_base = 'stats.log'; private static...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru