За последние 24 часа нас посетили 87572 программиста и 7981 робот. Сейчас ищут 2198 программистов ...

Как организовать пользовательскую почту

Тема в разделе "PHP для новичков", создана пользователем jenya777777, 12 мар 2011.

  1. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    пытаюсь организовать на сайте обмен сообщениями между пользователями.
    В таблице usermessage есть столбцы
    Код (Text):
    1.  
    2. id  nomer                             from  to     message       date         new
    3. 10  message4d723556164f34d7235561650d   2   1       привет!   03.10.2011  18:03   yes
    организую выборку так:
    Код (Text):
    1. "SELECT um.id, um.nomer, um.title, um.message, um.`date`, um.new, u.login, u.id as user_id, u.avatar FROM usermessages AS um INNER JOIN users AS u  ON um.`from` = u.id WHERE (um.from = 1 AND um.to=2) OR (um.from = 2 AND um.to=1) ORDER BY um.id DESC";
    Все хорошо, но вот когда один пользователь удаляет сообщение у себя, оно естественно удаляется и у другого пользователя. Как нужно переделать таблицу, чтобы при удалении сообщения одним пользователем, у другого сообщение оставалось бы.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    jenya777777
    ну и какие есть предположения по этому вопросу? если это разные сообщения, удаляться и храниться должны у разных людей независимо, то что еще тут думать? =)
     
  3. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Это теоретически понятно, что как то независимо друг от друга. Но как? Подскажите пожалуйста
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
  5. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Не все так просто igordata просто предложите совет
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    либо ты независимо их помечаешь удаленными, прочитанными и проч.

    либо дублируй строки
     
  7. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Предположим я сделаю 2 записи в таблицу
    [sql]
    id nomer from to message date new
    10 message4d723556164f34d7235561650d 2 1 привет! 03.10.2011 18:03 yes
    11 message4d723556164f34d7235561650d 1 2 привет2! 03.10.2011 18:03 yes
    [/sql]

    В таком случае, каким образом мне составить запрос на выборку данных.
    При этом запросе
    [sql]
    "SELECT um.id, um.nomer, um.title, um.message, um.`date`, um.new, u.login, u.id as user_id, u.avatar FROM usermessages AS um INNER JOIN users AS u ON um.`from` = u.id WHERE (um.from = 1 AND um.to=2) OR (um.from = 2 AND um.to=1) ORDER BY um.id DESC";
    [/sql]
    мне выводится те сообщения получаются дублируются
     
  8. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    приведите пример таблицы БД, как она выглядить будет?
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    я лучше пойду жену поцелую, прости =)
     
  10. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.547
    Симпатии:
    0
    Адрес:
    Мариуполь
    jenya777777
    Сделать 2 таблицы
    1) Messages - id, from, to, text
    2) Messages_deleted id, message_id, user_id

    Когда первый удалил - добавляем строку во 2 таблицу, второй удалил - еще одну строку во 2 таблицу.

    Также можно сделать таблицу Messages_readed аналогично Messages_deleted

    Запрос писать не буду - он элементарен. INNER JOIN второй таблицы
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    лучше уж флаги тогда
     
  12. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.547
    Симпатии:
    0
    Адрес:
    Мариуполь
    igordata

    Можно и флаги. Почему такой подход был - нужна была возможность отправлять сообщения группам пользователей. Т.е. в id получателя мог лежать id группы. Тут уже флагами не обойтись))
     
  13. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Сделал как посоветовал tommyangelo, создал две таблицы, а выборку не могу додуматься как сделать. Подскажите пожалуйста!
     
  14. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Зах таблицы плодить? А почему бы не сделать в 1 таблице что то типо:


    1) Messages - id, from, to, text, del1, del2

    Получаем:

    23 - 2 - 3 - Привет - 1 - 0

    т.е от кого пришло удалил. получатель не удалил. Если удаляет тот кому пришло то получится 1 - 1 и можно смело чистить :)
     
  15. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    об этом я думал уже, каким образом составить запрос на выборку?
     
  16. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Я тебя из движка одного могу пример показать :)

    PHP:
    1.                 //------------------------------------------------
    2.                 // Delete message
    3.                 //------------------------------------------------
    4.                 if ( $delete1 || $delete2 )
    5.                 {
    6.                     $DB->query("DELETE FROM " . DB_PREFIX . "messages WHERE ".($folder == 1 ? "member_id2='" . $SESSION->conf['member_id'] . "'" : "member_id1='" . $SESSION->conf['member_id'] . "'")." AND message_id='$id' LIMIT 1");
    7.                 }
    8.                 elseif ( $folder == 1 )
    9.                 {
    10.                     $DB->query("UPDATE " . DB_PREFIX . "messages SET delete2=1 WHERE member_id2='" . $SESSION->conf['member_id'] . "' AND message_id='$id' LIMIT 1");
    11.                 }
    12.                 elseif ( $folder == 2 )
    13.                 {
    14.                     $DB->query("UPDATE " . DB_PREFIX . "messages SET delete1=1 WHERE member_id1='" . $SESSION->conf['member_id'] . "' AND message_id='$id' LIMIT 1");
    15.                 }
     
  17. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Но это вроде просто параметры на удаление delete1 и delete2 ставятся =) придумай там условие если у delete1 значение = 1 то удалять полностью. как то так =)
     
  18. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Нет, это не то.
     
  19. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Вообщем я все сказал, чем мог тем помог ;D
     
  20. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    спасибо за совет
     
  21. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.547
    Симпатии:
    0
    Адрес:
    Мариуполь
    SELECT * FROM messages INNER JOIN messages_deleted ON messages.id = messages_deleted.message_id WHERE messages.to = $user_id AND messages_deleted.user_id != $user_id
     
  22. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    В этом случае не выводятся ни одного сообщения
     
  23. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.547
    Симпатии:
    0
    Адрес:
    Мариуполь
    проверяй данные.
     
  24. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
  25. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.547
    Симпатии:
    0
    Адрес:
    Мариуполь
    ой, там вместо INNER JOIN надо LEFT JOIN =)