Работа с документами для пользователей

PHP, MySQL: как узнать имя и фамилию пользователя

Я застрял в этом вопросе за последние пару часов, и мне очень нужен кто-то, кто поможет мне разобраться в этом. Я пытаюсь закончить свою систему личных сообщений, но я потерял себя в таблицах базы данных. Я создал три таблицы для системы, и они выглядят следующим образом:

CONVERSATION(**conversation_id**, subject) CONVERSATION_MEMBER(**conversation_id**, **user_id**, conversation_last_view, conversation_deleted) CONVERSATION_MESSAGE(**message_id**, conversation_id, user_id, message_date, message_text) 

Итак, в моей функции, чтобы получить все разговоры конкретного пользователя, я выбираю тему, дату и, наконец, хочу показать пользователю, с кем он разговаривает. Я написал следующий запрос:

SELECT c.conversation_id, c.conversation_subject, MAX(cmes.message_date) AS conversation_last_reply, FROM conversation c, conversation_member cmem, conversation_message cmes WHERE c.conversation_id = cmes.conversation_id AND c.conversation_id = cmem.conversation_id AND cmem.user_id = AND cmem.conversation_deleted = 0 GROUP BY c.conversation_id ORDER BY conversation_last_reply DESC 

И, наконец, я пытаюсь получить имя пользователя и фамилию (другого пользователя в разговоре), но я потерял себя от того, как это сделать. Я попытался создать еще одну функцию, которая получит идентификатор разговора, пропуская результаты первого запроса и вернет имя пользователя и фамилию, но это не сработало. Кстати, для пользователей у меня есть другая таблица. Наверное, мне не нужно вам говорить. Спасибо.

Что вы хотите сказать? Я не знаю, как я собираюсь что-то выбрать, потому что я делаю cmem.user_id = sessionID. Хотели бы вы рассказать что-нибудь еще о своем ответе?

5 ответов

$sql = "SELECT (user.forename, user.surname, other_fields. ) FROM conversation INNER JOIN conversation_member ON conversation.conversation_id = conversation_member.conversation_id INNER JOIN conversation_message ON conversation.conversation_id = conversation_message.conversation_id INNER JOIN users_table /* replace this with the name of your user table */ AS user ON user.user_id = conversation_member.user_id WHERE user.user_id = :userid AND conversation_member.conversation_deleted = 0 GROUP BY conversation.conversation_id;" $query = $db->prepare($sql); $query->bindParam(':userid', $userid, PDO::PARAM_INT); $query->execute(); $results = $query->fetchAll(); $user = $results[0]["user"]; //stores array of user fields (forename, surname, etc) 

Дело в том, что это вернет имя и фамилию вошедшего в систему пользователя, а не от другого участника разговора .

@Darko Но вы сохранили только один идентификатор пользователя? Я неправильно понял ваш вопрос? Все, что вам нужно, чтобы найти всех пользователей в одном разговоре?

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

Я не понимаю, почему у вас возникли проблемы с получением имени пользователя и фамилии, если вы смогли самостоятельно построить остальную часть этого запроса?

SELECT cmem.user_id, u.first_name, u.last_name, c.conversation_id, c.conversation_subject, MAX(cmes.message_date) AS conversation_last_reply FROM conversation c INNER JOIN conversation_member cmem on c.conversation_id=cmem.conversation_id INNER JOIN conversation_message cmes on c.conversation_id=cmes.conversation_id INNER JOIN users u on u.user_id = cmem.user_id WHERE cmem.user_id = AND cmem.conversation_deleted = 0 GROUP BY cmem.user_id, u.first_name, u.last_name, c.conversation_id, c.conversation_subject 

Теперь, я думаю, вы также должны пересмотреть свою структуру базы данных, чтобы все эти объединения не были необходимы. Я вижу несколько проблем. Во-первых, ваша база данных, похоже, переназначена. Почему у вас есть отдельная таблица «Разговоры», в которой есть только два поля, идентификатор беседы и тема? В любой системе сообщений, которую я когда-либо видел, тема всегда видна, поэтому вам всегда нужно присоединиться к таблице разговора, чтобы получить поле темы. Так или иначе, цепочка chat_id находится в каждой другой таблице. Просто добавьте поле темы в таблицу сообщений и исключите таблицу разговора, если все это выполняется, нормализация не всегда хорошая вещь.

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

Читайте также:  Создание регистрационной формы html

Наконец, что такое таблица talk_member? Основываясь на моей интерпретации, он должен представлять собой участника разговора, так как он имеет user_id. Зачем нужен флаг удаления беседы для одного участника разговора? Если что-то должно быть в таблице бесед. С этим улучшением единственным полем, оставшимся в нем, является chat_last_view, о котором на самом деле никто не заботится. Более важная вещь — talk_last_post, которая может быть легко получена из метки времени последнего сообщения, размещенного в потоке.

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

С вашим предложением я получу имя и фамилию зарегистрированного пользователя. Вот что я пытаюсь объяснить всем, кто присоединился к этому вопросу. Чтобы ответить на ваши вопросы, я посмотрю, как удалить таблицу разговоров и сделать что-то еще, но о флаге для удаленных сообщений я не могу просто удалить беседу. Потому что, если один из пользователей удалит диалог, он будет удален и в другом профиле. Я полностью удаляю разговор, когда оба пользователя устанавливают разговор как удаленный.

Да, но я думаю, ты слишком обдумываешь это. Иногда важно подумать о том, почему, прежде чем думать о том, как. Вы когда-нибудь использовали систему обмена сообщениями, где вы «удаляете» свою ветку? Вы бы даже не удосужились использовать эту функцию, если бы ее не удалили без проверки другого пользователя? Какова вероятность того, что один человек захочет удалить его, а другой человек тоже захочет удалить его? Кроме того, почему удаление будет на уровне диалога, а не на уровне сообщений?

Читайте также:  Cross correlation in python

Что ж, часть удаления 🙂 Мне бы очень хотелось получить помощь по актуальному вопросу. Пользователь не будет знать, что разговор на самом деле не удален, потому что после того, как я установил его «удаленный флаг», скажем, 1 не появится в окне его разговоров. После того, как другой пользователь установит это также в 1, тогда я удаляю это полностью. Я был бы признателен, если бы вы на самом деле дали мне какое-то предложение (по всей системе, если хотите) вместо того, чтобы критиковать меня 🙂

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

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

Нет, ты меня совсем не оскорбляешь. Спасибо за ваши предложения, я приму их к сведению и, возможно, переосмыслу эту вещь.

Источник

Как сделать вывод пользователей из БД и их данные?

Как сделать вывод пользователей из БД
Здравствуйте помогите пожалуйста как вывести список пользователей из бд CREATE TABLE IF NOT.

Как сделать вывод аватарки всех пользователей?
Нужно сделать вывод аватарки,получилось сделать только вывод название загруженого файла но не саму.

Как сделать вывод всех пользователей пока поле пустое?
Есть поиск пользователей написан на php,html,js при вводе в поле имя выводит пользователя но пока.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
function LoadDataUsers() // Загрузка списка юзеров { $query = mysql_query("SELECT id, fio FROM sobstvenniki"); $array = mysql_fetch_array($query); do { echo "\"?id_user=".$array['id'].">".$array['id']." ".$array['fio'].""; } while($array = mysql_fetch_array($query)); } function CurrentUser($id_user) //Вывод инфы по конкретному пользователю { if(empty($id_user)) { echo "Юзер не выбран"; } else { $query = mysql_query("SELECT * FROM sobstvenniki WHERE "); $array = mysql_fetch_array($query); return $array; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
 session_start(); ?>   

Здраствуйте!

$db = mysql_connect("localhost", "root"); mysql_select_db("diplomnaya",$db); function LoadDataUsers() // Загрузка списка юзеров { $query = mysql_query("SELECT id, fio FROM sobstvenniki"); $array = mysql_fetch_array($query); do { echo "\"?id_user=".$array['id'].">".$array['id']." ".$array['fio'].""; } while($array = mysql_fetch_array($query)); } function CurrentUser($id_user) //Вывод инфы по конкретному пользователю { if(empty($id_user)) { echo "Юзер не выбран"; } else { $query = mysql_query("SELECT * FROM sobstvenniki WHERE "); $array = mysql_fetch_array($query); return $array; } } ?>
Подвал

function CurrentUser($id_user) //Вывод инфы по конкретному пользователю
if(empty($id_user))
echo «Юзер не выбран»;
>
else
$query = mysql_query(«SELECT * FROM sobstvenniki WHERE «);
$array = mysql_fetch_array($query);
return $array;
>
>

?>
З.Ы. В вопрос сильно не вникал, если я что-то не допонял поправьте плз.

Источник

Как сделать вывод пользователей из БД и их данные?

Как сделать вывод пользователей из БД
Здравствуйте помогите пожалуйста как вывести список пользователей из бд CREATE TABLE IF NOT.

Как сделать вывод аватарки всех пользователей?
Нужно сделать вывод аватарки,получилось сделать только вывод название загруженого файла но не саму.

Как сделать вывод всех пользователей пока поле пустое?
Есть поиск пользователей написан на php,html,js при вводе в поле имя выводит пользователя но пока.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
function LoadDataUsers() // Загрузка списка юзеров { $query = mysql_query("SELECT id, fio FROM sobstvenniki"); $array = mysql_fetch_array($query); do { echo "\"?id_user=".$array['id'].">".$array['id']." ".$array['fio'].""; } while($array = mysql_fetch_array($query)); } function CurrentUser($id_user) //Вывод инфы по конкретному пользователю { if(empty($id_user)) { echo "Юзер не выбран"; } else { $query = mysql_query("SELECT * FROM sobstvenniki WHERE "); $array = mysql_fetch_array($query); return $array; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
 session_start(); ?>   

Здраствуйте!

$db = mysql_connect("localhost", "root"); mysql_select_db("diplomnaya",$db); function LoadDataUsers() // Загрузка списка юзеров { $query = mysql_query("SELECT id, fio FROM sobstvenniki"); $array = mysql_fetch_array($query); do { echo "\"?id_user=".$array['id'].">".$array['id']." ".$array['fio'].""; } while($array = mysql_fetch_array($query)); } function CurrentUser($id_user) //Вывод инфы по конкретному пользователю { if(empty($id_user)) { echo "Юзер не выбран"; } else { $query = mysql_query("SELECT * FROM sobstvenniki WHERE "); $array = mysql_fetch_array($query); return $array; } } ?>
Подвал

function CurrentUser($id_user) //Вывод инфы по конкретному пользователю
if(empty($id_user))
echo «Юзер не выбран»;
>
else
$query = mysql_query(«SELECT * FROM sobstvenniki WHERE «);
$array = mysql_fetch_array($query);
return $array;
>
>

?>
З.Ы. В вопрос сильно не вникал, если я что-то не допонял поправьте плз.

Источник

Оцените статью