У меня есть две таблицы таблиц mysql и следуйте где следовать: followid, from_user_id, to_user_id, дата, статус и должность содержат заголовок, описание, createdby, createdtime Я хочу написать запрос чтобы получить последнее добавленное сообщение, которое публикуется пользователями, которые следуют за конкретным пользователем. Это означает только нашу страницу на facebook, чтобы опубликовать сообщение, которое наши друзья публикуют на нашей странице.Как написать запрос, чтобы получить результат в mysql
-2
A
ответ
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
надежды, которые вдохновляют вас
ура!
С вашей текущей структурой базы данных, невозможно – Shehary
Как кто-то должен переваривать вашу структуру таблицы из формата абзаца? Нам не нужно будет так много работать, чтобы визуализировать вашу проблему. прочитайте это сами, как будто вы собираетесь отвечать на него – charlietfl