Как связать автоматически увеличивающийся идентификатор из одной таблицы с идентификатором в другой таблице? - PullRequest
0 голосов
/ 12 января 2011

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

Я подумал, что мне нужно использовать возможности mysql join, но у меня есть несколько вопросов ... В моей модели я начал кодировать входящие сообщения и получил следующий запрос:

"SELECT * FROM messages WHERE from_id = '$ id' ";

$ id - это, по сути, автоматически увеличиваемый идентификатор из моей таблицы пользователей, а from_id - то же самое, но в моей таблице сообщений.

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

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

Ответы [ 4 ]

1 голос
/ 12 января 2011

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

SELECT {все, что вы хотите иметь} от пользователей u, сообщения m ГДЕ u.id = m.from_id

чем в вашем предложении SELECT вы можете получить информацию о пользователях с помощью u.username, при условии, что в вашей таблице пользователей есть столбец имени пользователя.

1 голос
/ 12 января 2011

в зависимости от того, какую библиотеку аутентификации вы используете, вам понадобится что-то подобное в CI:

view_messages()
{
    //this check could be done in the constructor 
    if($this->auth->logged_in()==TRUE)
    {
        $userID=$this->auth->user_data('userID');
    }
    else
    {
        redirect('not_logged_in');
    }

    $this->load->model('message');
    $messages = $this->message->get_messages($userID);
    // do what you want with messages.
    //print_r($messages);
}

модель ваших сообщений:

function get_messages($userID=null)
{
    $this->db->where('userID', $userID);
    $data = $this->db->get('tblMessages');
    return $data->result();
}
1 голос
/ 12 января 2011

Не можете ли вы использовать сеанс для сохранения идентификатора пользователя при входе в систему?Таким образом, вы можете иметь идентификатор пользователя при необходимости.

// ...

$fromID = $_SESSION['uid'];
INSERT INTO `message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message')

Конечно, мы не говорим здесь о безопасности, поэтому код явно не защищен.Но мы оставим это для другого обсуждения.Я ударил тебя в правильном направлении?: Р

0 голосов
/ 13 января 2011

Это нечто большее, чем просто немного узнать о соединениях MySQL.Есть много систем, которые вы можете скачать, чтобы получить хорошую идею, попробовать phpBB или другое программное обеспечение для форумов.

С системами Private Message очень легко сделать что-то мусорное, но хорошие - сложны.

Помните, что если в вашем сообщении есть только одна запись, как в примере, предоставленном другим пользователем:

INSERT INTO `message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message')

Это нужно будет показать в папке «Входящие» для пользователя и в поле «Отправлено» для пользователя от.Если to_user удаляет его, из from_user внезапно не появляется запись сообщения.

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

Сообщения должны существовать всегда, пользователи просто «мусорят» (установите is_trach на 1 для их соединения).Когда пользователи удаляют из корзины, они удаляют только свое соединение с сообщением, а когда последний пользователь удалил свое соединение, ТОГДА вы можете удалить его (или получить задание cron для удаления потерянных сообщений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...