#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