1 Востаннє редагувалося rozmath (21.05.2013 15:42:18)

Тема: Непрочитані повідомлення у системі переписки

Є база повідомлень такої структури:
Повідомлення
https://dl.dropboxusercontent.com/u/93079663/4.png
Користувачі
https://dl.dropboxusercontent.com/u/93079663/5.png

На сторінці вони відображаються у вигляді кнопок з CSS

<div id="recipient_list">
                <?php
                $query = mysql_query("SELECT username FROM users");
                while(list($username) = mysql_fetch_row($query))
                    if($username != $_SESSION['username'])
                        echo "<input type=submit name='recipient' class='magic_button_blue_left' value='$username' /><br>".PHP_EOL;
                ?>
                </div>

Відображається добре, працює все правильно, от тільки тепер потрібно прикріпити до цього кількість непрочитаних повідомлень до кожного користувача.
Як це зробити за допомогою jQuery?

Приблизно має вийти щось на подобі цього:
https://dl.dropboxusercontent.com/u/93079663/6.png
Або перший (+10), або другий (+3) варіант.
Дякую.

2 Востаннє редагувалося Адріян Ігорович (21.05.2013 15:52:54)

Re: Непрочитані повідомлення у системі переписки

Якщо я розумію, то Вам потрібен скрипт, який виконує запит до таблиці з повідомленнями.
Запит на подобі такого:

SELECT message FROM таблиця_з_повідомленнями WHERE recipient = 'імя юзера' AND status = 'unread'

Приблизно десь так.
За допомогою самого JQuery запит до БД не зробиш, тому потрібно зробити php скрипт, який буде виконувати потрібний запит до БД, а за допомогою JQuery ми вже тільки звертаємося до того скрипта.

3

Re: Непрочитані повідомлення у системі переписки

Я зробив ось так:

function reflash_new_message(){
    var current_user = document.getElementById('author').value;
    $.ajax({
        url: 'get_recipient_list.php',
        type: 'POST',
        cache: 'false',
        data: {
                        current_user: current_user
                    },
        success: function(html){
            console.log(html);
        }
    });
};

Код get_recipient_list.php:

<?php
$current_user = $_POST['current_user'];

include 'connect.php';
$query = mysql_query("SELECT username FROM users");
while(list($username) = mysql_fetch_array($query))
    if($username!=$current_user)
        echo $username."\n";
?>

Це дозволяє вивести тільки усіх користувачів, крім користувача сесії.
Як згрупувати непрочитані повідомлення для кожної переписки і вивести їх кількість біля назви співрозмовника, так як на третьому рисунку у шапці?

4 Востаннє редагувалося Bartash (21.05.2013 18:02:49)

Re: Непрочитані повідомлення у системі переписки

Має бути схоже на таке:

select count(m.id) as [Unreaded], u.username from users u
join messages m on u.id=m.userid
where m.status='unread'
group by u.username

Однак я не бачу очікуваного поля messages.userid (натомість messages.author, логіка якого загадкова).

I belong to the Dead Generation.

5

Re: Непрочитані повідомлення у системі переписки

Взагалі не зрозумів цей запис.
Це, здається, LINQ. Не знаю як це використати.
Може підкажете?
Логіка бази повідомлень така:
id, author та recipient - номер , автор та отримувач повідомлення, відповідно.
author_room та recipient_room, status - статус повідомлення. Перші два отримують такі статуси: - надіслане, видалене, вхідне. status - прочитане/непрочитане.
Як підрахувати непрочитані повідомлення, згрупувати їх по переписках та відтворити кількість непрочитаних у переписках (іменах співрозмовників). Усі використані для цього елементи я відобразив у шапці.

6

Re: Непрочитані повідомлення у системі переписки

rozmath написав:

Взагалі не зрозумів цей запис.
Це, здається, LINQ. Не знаю як це використати.
Може підкажете?
Логіка бази повідомлень така:
id, author та recipient - номер , автор та отримувач повідомлення, відповідно.
author_room та recipient_room, status - статус повідомлення. Перші два отримують такі статуси: - надіслане, видалене, вхідне. status - прочитане/непрочитане.
Як підрахувати непрочитані повідомлення, згрупувати їх по переписках та відтворити кількість непрочитаних у переписках (іменах співрозмовників). Усі використані для цього елементи я відобразив у шапці.

Причому тут linq? Це стандартний SQL. Я бачу шлях таким: витягти з бази готові дані, а у скрипті їх просто підставити та оздобити плюшками.


У моєму запиті тягнеться поле Юзернейм і кількість повідомлень, що мають статус непрочитані. Оператор join дозволяє з'єднати дві таблиці, бо кількість повідомлень і список користувачів лежать в окремих таблицях.

Однак у вас таблиці будовані інакше: тут ліпше варіант Hanter'а. Єдине - додамо групування та агрегати:

SELECT count(message) as unread, recipient FROM таблиця_з_повідомленнями WHERE status = 'unread' group by recipient;
I belong to the Dead Generation.