За последние 24 часа нас посетили 37270 программистов и 1721 робот. Сейчас ищет 621 программист ...

Как реализовать смс переписку между авторизованными пользователями сайта PHP MySQL

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 11 май 2017.

  1. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    PHP:
    1. //Запрос в БД на вывод сообщений
    2. //Подготавливаю запрос
    3. $z_inbox = $pdo->prepare('
    4. //Делаю выборку полей
    5. SELECT
    6. //считаю строки
    7. SQL_CALC_FOUND_ROWS
    8. //указываю поля с какими буду работать в таблице messages
    9. `tb1`.`message_id`, `for_user_id`, `from_user_id`, `text`, `pm_read`, `date`,
    10. //указываю поля с какими буду работать в таблице users
    11. `tb2`.`user_id`, `user_login`, `user_photo`
    12. //выбираю с какой таблицей буду работать
    13. FROM
    14. //указываю выбранные таблицы
    15. `messages` tb1, `users` tb2
    16. //от куда выбираем поля
    17. WHERE
    18. //в таблицу message подставляю сессию юзера
    19. `tb1`.`for_user_id` = ?
    20. AND
    21. //в таблице message поле from_user_id сравниваю с таблицей юзер c полем user_id
    22. `tb1`.`from_user_id` = `tb2`.`user_id`
    23. //делаю группировку по дате
    24. ORDER by
    25. `date`
    26. //ну и выбор лимит сколько сообщений может помещаться на страницу
    27. DESC LIMIT '.$limit_page.', '.$gcount.'');
    28. $z_inbox->execute([$user_id]);//выполняю запрос
    29. $res_inbox = $z_inbox->fetchall();//вывожу массив результат всех строк
    Что же не так делаю?
    Можно построить этот же запрос с INER JOIN
    Или такой подход как делаю я нормальным считается?
     
    #177 _ne_scaju_, 13 июн 2017
    Последнее редактирование: 13 июн 2017
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    масло масленое

    нахрена и что ты делаешь в условии, по которому выбираешь?
     
  4. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    А что не так, не надо этого условия?
     
  5. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @_ne_scaju_, ты попробовал запрос, который я выложил?
     
  6. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    сейчас попробую, я просто уже и не помню, пробовал если честно. И еще раз попробую лишним не будет. Это же запрос который ты показал для прочтения сообщения делал или как?
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @_ne_scaju_, да, подредактировал, может подойдет.
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    я запрос вставил в код где хочу вывести сообщения между 2мя пользователями чтобы при клике на диалог открывался весь список сообщений между этими пользователями.
    Но получается выводятся все сообщения от всех пользователей а мне надо между 2мя пользователями.
    Кстати я базу подредактировал изменил названия полей и убрал не нужные поля.
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    объясни его так, как ты его понимаешь, с причинами и следствиями. Тогда будет понятно что с ним так, а что - не так.
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    честно я не знаю как объяснить и объяснять покажи любой свой запрос и объясни мне его как ты понимаешь что и как происходит. СПАСИБО.
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Чтобы понять, какой запрос составить, хорошо было бы увидеть структуру твоей базы, вероятно тогда получится составить нужный запрос.
    Или выложить на sqlfiddle
     
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    выкладываю дамп таблицы в zip архиве.
    --- Добавлено ---
    @mahmuzar
    Посмотри структуру пожалуйста. Выложил не всю а те таблицы с которыми работаю.
     

    Вложения:

    • site.zip
      Размер файла:
      2,2 КБ
      Просмотров:
      2
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    у тебя есть два собеседника
    и в таблице есть сообщеня от первого второму и от второго первому
    ну и...?!
     
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    @igordata
    уже убрал многие ко многим, для начала хочу реализовать один ко многим, а со временем многие ко многим.
    У меня сейчас так: юзер один пишет юзеру2 и запись в таблицу идет примерно так:
    1, юзер1, юзер2, текст, дата.
    а в обратном порядке запись идти не будет, ну ты понял.
    Если юзер1 пишет юзеру2 то вся запись будет идти по порядку не дублироваться второму юзеру2.
     
    #189 _ne_scaju_, 14 июн 2017
    Последнее редактирование: 14 июн 2017
  15. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Народ помогите построить запрос, может его можно по другому построить, помогите пожалуйста.
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    @mahmuzar
    я построил вот такой интересный запрос но результат остался тот же вытягиваются все сообщения которые пришли пользователю, а мне надо чтобы вытягивались сообщения между 2мя пользователями(
    PHP:
    1. $z_inbox = $pdo->prepare("
    2. SELECT
    3. u.`user_id`, `user_login`, `user_photo`,
    4. m.`message_id`, `from_user_id`, `for_user_id`, `text`, `date`,
    5. d.`dialog_id`, `from_dialog`, `for_dialog`,  `idate`
    6. FROM `users` u
    7. INNER JOIN `messages` m
    8. ON m.`message_id` = u.`user_id` AND m.`from_user_id` = ?
    9. OR m.`message_id` = u.`user_id` AND m.`for_user_id` = ?
    10. INNER JOIN `dialogs` d
    11. ON d.`dialog_id` = u.`user_id` AND d.`from_dialog` = '".$user_id."'
    12. OR d.`dialog_id` = u.`user_id` AND d.`for_dialog` = '".$user_id."'");
    13. $z_inbox->execute([$user_id, $user_id]);          
    14. $res_inbox = $z_inbox->fetchall();
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    Ок сейчас сделаю, и скину!
     
    #193 _ne_scaju_, 15 июн 2017
    Последнее редактирование: 15 июн 2017
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    я не пойму как пользоваться этим сервисом, вставляю CREAT TABLE и не фига ошибки, хотя бы подсказали где они не просто ругается.
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тренируйся, учись :D
     
  21. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    там выполнять вставку таблиц так, у себя по другому)))
    Делаю так, уже все вырезал что можно но ошибка есть ошибка в запросе:
    PHP:
    1. CREATE TABLE `messages` (
    2.   `message_id` int(11) auto_increment PRIMARY KEY,
    3.   `from_user_id` int(11),
    4.   `for_user_id` int(11),
    5.   `text` text,
    6.   `date` datetime);
    Что не так?
    Давай без приколов, я же скинул зип архив там были таблицы, создана и даже некоторые поля были созданы, вот от туда я беру и вставляю и не фига, синтаксис ему не нравится.
     
    #196 _ne_scaju_, 15 июн 2017
    Последнее редактирование: 15 июн 2017
  22. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Читаешь ошибку, понимаешь, исправляешь :)
    http://sqlfiddle.com/#!9/852f41/1 - я вот так задачу с диалогами решаю, чтоб не было ни from_user_id, ни for_user_id, никаких длинных запросов с OR. Просто делаю связь многие-ко-многим пользователя и диалога. Преимущество ещё в том, что если заказчик попросит диалог между 3-4 пользователями, то ничего в этой структуре базы менять не нужно, хоть между 10-ю. Ну в реальном проекте полей чуть больше, но не суть важно.
    --- Добавлено ---
    Твой запрос, кстати, работает на фидле, ты что-то ещё напортачил: http://sqlfiddle.com/#!9/be1b75
     
  23. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Я посмотрел запрос, по принципу у меня вроде такой запрос. Только я не понял где у вас многие ко многим в таблице используется. Или вы создали ещё одну таблицу которая соединяет две таблицы и сообщений и диалогов.
    --- Добавлено ---
    @mkramer
    Ошибку читал и она была единой как я запрос не старался сделать выдавало одну и ту же ошибку.
     
  24. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    У меня смысл в том, чтобы запрос сообщений был самым элементарным:
    Код (Text):
    1. select * from messages where dialog_id=12
    А связь многие-ко-многим между пользователем и диалогами
     
  25. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Связь многие ко многим, такая из-за ещё одной таблици где id и dialod_id находится в ней?
    А как происходит запись сообщений? юзер1 пишет юзеру2 и запись происходит так:
    1 юзер1 юзер2 message
    Это запись создается только в одну сторону, а во вторую сторону запись создается?
    1 юзер2 юзер1 message

    и еще вопрос: при удалении диалога что у вас происходит, как удаляется диалог и сообщения у этих пользователей?