Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Группировка ID - переписка пользователей

Сообщения:  [1-10]    [11-20]   [21-30]  [31-32] 

 
 автор: Valick   (05.04.2012 в 10:47)   письмо автору
 
   для: ZetRider   (04.04.2012 в 22:40)
 

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

  Ответить  
 
 автор: Valick   (04.04.2012 в 23:17)   письмо автору
2.6 Кб
 
   для: ZetRider   (04.04.2012 в 22:40)
 

сделал dump так проще таблицы сделать

  Ответить  
 
 автор: Valick   (04.04.2012 в 22:58)   письмо автору
 
   для: ZetRider   (04.04.2012 в 22:40)
 

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

  Ответить  
 
 автор: ZetRider   (04.04.2012 в 22:40)   письмо автору
 
   для: Valick   (04.04.2012 в 22:37)
 

Да конечно! Спасибо, так будет проще понять

  Ответить  
 
 автор: Valick   (04.04.2012 в 22:37)   письмо автору
5.5 Кб
 
   для: ZetRider   (04.04.2012 в 22:31)
 

мне проще сюда прикрепить :)
там по ходу разберетесь какие таблицы создать

  Ответить  
 
 автор: ZetRider   (04.04.2012 в 22:31)   письмо автору
 
   для: Valick   (04.04.2012 в 22:29)
 

буду очень благодарен zetrider[@]bk.ru

  Ответить  
 
 автор: Valick   (04.04.2012 в 22:29)   письмо автору
 
   для: ZetRider   (04.04.2012 в 22:21)
 

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

  Ответить  
 
 автор: ZetRider   (04.04.2012 в 22:21)   письмо автору
 
   для: Valick   (04.04.2012 в 22:14)
 

Спасибо! Вы правы, верно пока пользователь будет писать сообщение, в новом диалоге между другими пользователями может оказаться тот же unique ))

Буду разбирать Ваш алгоритм.

  Ответить  
 
 автор: Valick   (04.04.2012 в 22:14)   письмо автору
 
   для: ZetRider   (04.04.2012 в 21:35)
 

ничего хорошего не могу сказать про ваш код
например
"SELECT msg_unique FROM messages_list ORDER BY msg_unique DESC LIMIT 1";
это верёвочная лестница над пропастью
не забывайте в реальных приложениях доступ к бд одновременно имеет большое количество пользователей, и логика изначально должна это подразумевать

сам уже запутался, но вроде все работает.
это плохо что запутались :)

  Ответить  
 
 автор: ZetRider   (04.04.2012 в 21:35)   письмо автору
 
   для: Valick   (30.03.2012 в 22:35)
 

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

Создаем таблицу messages_list:
id,
msg_unique,
user_id,
user_to,
messages,
date,
reply (default = 0)

Создаем функции (примеры):
<?php
/* Проверяем есть ли переписка между пользователями */
function check_unique($user_ID$user_to) {
    
$res "SELECT msg_unique FROM messages_list WHERE ((user_id = '$user_ID' AND user_to = '$user_to') OR (user_id = '$user_to' AND user_to = '$user_ID')) ORDER BY date DESC";
    if(
count($res) == 0) {
        
$unique max_unique(); // чуть ниже
    
} else {
        foreach (
$res as $row) {
            
$unique $row->msg_unique;
        }
    }
    return 
$unique;
}

/* Получаем максимальный unique */
function max_unique() {
    
$query_unique "SELECT msg_unique FROM messages_list ORDER BY msg_unique DESC LIMIT 1";
    if (empty(
$query_unique)) {
        
$unique "1";
    } else {
        foreach (
$query_unique as $query_unique_row) {
            
$unique $query_unique_row->msg_unique 1;
        }
    }
    return 
$unique;
}

/* ID последнего сообщения при записи */
function last_reply_msg($msg_unique='') {
    
$msg_unique intval($msg_unique);

    
$res "SELECT * FROM messages_list WHERE msg_unique = '$msg_unique' ORDER BY date DESC LIMIT 1";
    if(
count($res) == 0) {
        return 
false;
    } else {
        foreach (
$res as $row) {
            return 
$row->id;
        }
    }
    
}
?>


Допустим в таблице уже есть запись:

id | msg_unique | user_id | user_to | messages | date | reply
1  | 1          | 1(катя) | 2(вася) | text     | .... | 0


Когда Вася пишет Маше сообщение мы проверяем был ли у них диалог ( check_unique() ), если да то присваиваем его номер, если нет то присваиваем новый максимальный ( max_unique() )
Так же перед постом нового сообщения у предыдущего то есть пока что последнего мы ставим статус в столбец reply 1, что означает на него есть ответ.

Таблица принимает следующий вид:

id  | msg_unique | user_id | user_to | messages | date | reply
1   | 1          | 1(катя) | 2(вася) | text     | .... | 1
2   | 1          | 2(вася) | 1(катя) | text     | .... | 0



Теперь как же вывести лист последних сообщений:

<?php
$res 
"SELECT * FROM messages_list WHERE (user_id = '$user_ID' OR user_to = '$user_ID') AND reply = '0' GROUP BY `msg_unique` ORDER BY `date` DESC");
?>

так мы получили последнее сообщение на которое нет ответа.

сам уже запутался, но вроде все работает.

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]  [31-32] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования