Мне нужно получить список пользователей, которым ранее было отправлено сообщение (MySQL)

#php #mysql #sql

Вопрос:

Я создаю веб-страницу обмена мгновенными сообщениями, я собрал всю базу данных и сделал 100% интерфейса всей страницы, мне нужно только выполнить меню «Пуск»… Поэтому в меню «Пуск» я просто хочу показать пользователям, что ** сообщение было отправлено ранее**, мне не удалось этого сделать, и прямо сейчас я показываю список ** всех зарегистрированных пользователей ** .. Что-то вроде следующего-это то, что я показываю

 PROFILE PHOTO 1 - User Nº1 - Last message sent - Status (Offline / Online)
PROFILE PHOTO 2 - User Nº2 - No messages have been sent - Status (Offline / Online)
PROFILE PHOTO 3 - User Nº3 - Last message sent - Status (Offline / Online)
PROFILE PHOTO 4 - User Nº4 - Last message sent - Status (Offline / Online)
 

Когда я хочу показать что-то вроде следующего:

 PROFILE PHOTO 1 - User Nº1 - Last message sent - Status (Offline / Online)
PROFILE PHOTO 3 - User Nº3 - Last message sent - Status (Offline / Online)
PROFILE PHOTO 4 - User Nº4 - Last message sent - Status (Offline / Online)
 

В настоящее время дизайн моей таблицы выглядит следующим образом:

 > messages
msg_id | incoming_msg_id | incoming_msg_id | outgoing_msg_id | msg
 
 > users
user_id | unique_id | fname | lname | email | password | img | status
 

Уточнение, поле incoming_msg_id-это идентификатор пользователя, который получает сообщение, а поле outgoing_msg_id-это тот, который его отправляет, что в данном случае соответствует полю user_id users таблицы.

В настоящее время мой код выглядит следующим образом, который, как я уже сказал вам, показывает, что я оставляю ниже.

 <?php
    session_start();
    include_once "config.php";
    $outgoing_id = $_SESSION['unique_id'];
    $sql = "SELECT * FROM users WHERE NOT unique_id = {$outgoing_id} ORDER BY user_id DESC";
    $query = mysqli_query($conn, $sql);
    $output = "";
    if(mysqli_num_rows($query) == 0){
        $output .= "No users are available to chat";
    }elseif(mysqli_num_rows($query) > 0){
        include_once "data.php";
    }
    echo $output;
?>
 
 PROFILE PHOTO 1 - User Nº1 - Last message sent - Status (Offline / Online)
PROFILE PHOTO 2 - User Nº2 - No messages have been sent - Status (Offline / Online)
PROFILE PHOTO 3 - User Nº3 - Last message sent - Status (Offline / Online)
PROFILE PHOTO 4 - User Nº4 - Last message sent - Status (Offline / Online)
 

Наконец, я оставляю вам две реальные и актуальные фотографии моих досок:


отредактированный


Ответ №1:

Во-первых, вам нужно получить идентификатор пользователя поля в таблице (сообщения). Позже вы можете присоединиться к этой таблице и написать выберите как :

 select * from users usr
join messages msg on msg.user_id = usr.user_id
where msg.incoming_msg_id is not null
 

Позже он покажет всех пользователей, отправивших сообщение.

@ОБНОВЛЕНИЕ

Если вы сказали, что поле outgoing_msg_id-это идентификатор пользователя, который там выберите, будет выглядеть так:

 select DISTINCT usr.user_id,usr.fname,usr.lname from users usr
join messages msg on msg.outgoing_msg_id = usr.user_id
 

Этот выбор покажет всех пользователей, отправивших сообщение.

@ПРАВКА 3

 So your php code should be like :

<?php
    session_start();
    include_once "config.php";
    $outgoing_id = $_SESSION['unique_id'];
    $sql = "SELECT * FROM users WHERE NOT unique_id = {$outgoing_id} and unique_id in (select outgoing_msg_id from messages)  ORDER BY user_id DESC";
    $query = mysqli_query($conn, $sql);
    $output = "";
    if(mysqli_num_rows($query) == 0){
        $output .= "No users are available to chat";
    }elseif(mysqli_num_rows($query) > 0){
        include_once "data.php";
    }
    echo $output;
?>
 

Комментарии:

1. mysqli_num_rows() ожидает, что параметр 1 будет mysqli_result, логическое значение, заданное в route

2. Сначала вам нужно отредактировать сообщения таблицы и добавить туда новое поле : идентификатор пользователя ->, которое будет таким же, как идентификатор пользователя в таблице пользователей.

3. Идентификатор пользователя какого из двух пользователей?

4. Не думайте так , вам нужно проверить, что я не знаю вашей схемы базы данных. Но, судя по имени поля, это, похоже, не идентификатор пользователя, отправившего сообщение. ЕСЛИ вы уверены, что это идентификатор пользователей, которые отправляют сообщение, я могу отредактировать свою одежду и написать правильный выбор

5. Теперь у меня другая проблема, для каждого сообщения и каждого пользователя, отправившего сообщение, мне показан пример поля: Пользователь 1 — LastMsg — ID // Пользователь 1 — LastMsg — ID // Пользователь 2 — LastMsg — ID // Пользователь 1 — LastMsg — ID