2015-07-17 3 views
-2

У меня есть две таблицы таблиц mysql и следуйте где следовать: followid, from_user_id, to_user_id, дата, статус и должность содержат заголовок, описание, createdby, createdtime Я хочу написать запрос чтобы получить последнее добавленное сообщение, которое публикуется пользователями, которые следуют за конкретным пользователем. Это означает только нашу страницу на facebook, чтобы опубликовать сообщение, которое наши друзья публикуют на нашей странице.Как написать запрос, чтобы получить результат в mysql

+2

С вашей текущей структурой базы данных, невозможно – Shehary

+1

Как кто-то должен переваривать вашу структуру таблицы из формата абзаца? Нам не нужно будет так много работать, чтобы визуализировать вашу проблему. прочитайте это сами, как будто вы собираетесь отвечать на него – charlietfl

ответ

0

Хорошо, я изменил немного вашу схему, чтобы выглядеть следующим образом:

последующих таблиц

+------------------+----------+------+-----+---------+-------+ 
| Field   | Type  | Null | Key | Default | Extra | 
+------------------+----------+------+-----+---------+-------+ 
| user_id   | int(11) | NO | MUL | NULL |  | 
| followin_user_id | int(11) | YES |  | NULL |  | 
| date    | datetime | YES |  | NULL |  | 
| status   | bit(1) | YES | MUL | NULL |  | 
+------------------+----------+------+-----+---------+-------+ 

сообщений таблица

+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| post_id  | int(11)  | NO | PRI | NULL | auto_increment | 
| title  | varchar(255) | YES |  | NULL |    | 
| description | varchar(255) | YES |  | NULL |    | 
| createdby | int(11)  | YES | MUL | NULL |    | 
| createdtime | timestamp | YES |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 

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

+---------+-------------+-----------------------------+-----------+---------------------+ 
| post_id | title  | description     | createdby | createdtime   | 
+---------+-------------+-----------------------------+-----------+---------------------+ 
|  1 | hello  | the sun is shiningtoday lol |   2 | 2015-07-18 01:05:46 | 
|  2 | hello again | its night now    |   2 | 2015-07-18 01:06:23 | 
|  3 | wow   | just wow     |   1 | 2015-07-11 01:06:55 | 
|  4 | yeah  | hi there     |   3 | 2015-07-18 01:37:48 | 
|  5 | yeah2  | hithere for the 2nd time |   3 | 2015-07-18 01:40:05 | 
+---------+-------------+-----------------------------+-----------+---------------------+ 

+---------+------------------+------+--------+ 
| user_id | followin_user_id | date | status | 
+---------+------------------+------+--------+ 
|  1 | NULL    | NULL | NULL | 
|  2 |    1 | NULL | NULL | 
|  3 |    1 | NULL | NULL | 
|  4 |    2 | NULL | NULL | 
|  5 |    2 | NULL | NULL | 
+---------+------------------+------+--------+ 

если вы используете InnoDB, то вы можете создать внешний ключ, как этого

ALTER TABLE `posts` ADD CONSTRAINT `posts_ibfk` FOREIGN KEY (`createdby`) REFERENCES `follow` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; 

, если не используются InnoDB, то фиги последней команды: р

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

$qry = $this->db->query(' 
SELECT 
* 
FROM 
posts 
INNER JOIN follow ON posts.createdby = follow.user_id 
WHERE 
follow.followin_user_id = 1 
ORDER BY 
posts.createdtime DESC 
'); 

return $qry->result(); 

результат должен выглядеть примерно так

+---------+-------------+-----------------------------+-----------+---------------------+---------+------------------+------+--------+ 
| post_id | title  | description     | createdby | createdtime   | user_id | followin_user_id | date | status | 
+---------+-------------+-----------------------------+-----------+---------------------+---------+------------------+------+--------+ 
|  5 | yeah2  | hithere for the 2nd time |   3 | 2015-07-18 01:40:05 |  3 |    1 | NULL | NULL | 
|  4 | yeah  | hi there     |   3 | 2015-07-18 01:37:48 |  3 |    1 | NULL | NULL | 
|  2 | hello again | its night now    |   2 | 2015-07-18 01:06:23 |  2 |    1 | NULL | NULL | 
|  1 | hello  | the sun is shiningtoday lol |   2 | 2015-07-18 01:05:46 |  2 |    1 | NULL | NULL | 
+---------+-------------+-----------------------------+-----------+---------------------+---------+------------------+------+--------+ 
4 rows in set 

Теперь все, что вам нужно сделать, чтобы получить 1-ю строку, где user_id (CreatedBy) изменения с PHP что-то вроде этого

$user_id_flag=NULL; 
foreach ($result as $row) 
{ 
if($user_id_flag != $row->createdby) 
    echo $row->title; 
else 
    $user_id_flag=$row->createdby; 
} 

это покажет вам последний пост название каждого пользователя после пользователя с ид = 1

надежды, которые вдохновляют вас

ура!