Сразу оговорюсь, что LIMIT 10, 10 не подходит. Потому что посты постоянно добавляются, а значит отсчет от первого, что и делает offset в limit, не подходит. Ведь записи будут дублироваться.
Приложение запросило 1 страницу (10 постов с ID от 1 до 10), все ок, но теперь пользователь остановился скажем на 5 минут почитать пост. В этот момент другие пользователи добавляют еще 10 постов... Теперь выполнив запрос с LIMIT 10, 10 окажется так, что offset начинается с новых постов, и поэтому посты с ID 1 - 10 сервер вернет повторно. Потому что в списке offset они теперь на позициях 10-20
public function createUserFromSocialId($provider, $social_id, $name, $email){
$provider = $this->db->real_escape_string($provider);
$social_id = intval($social_id);
$name = $this->db->real_escape_string($name);
$email = $this->db->real_escape_string($email);
try{
$this->db->begin_transaction();
if(!$this->db->query("INSERT INTO `users` (`name`, `email`) VALUE('{$name}','{$email}')")){
throw new \Exception;
}
$user_id = $this->db->insert_id;
if(empty($user_id)){
throw new \Exception;
}
if(!$this->db->query("
INSERT INTO `users_social` (`provider`, `social_id`, `user_id`)
VALUE('{$provider}', '{$social_id}','{$user_id}')")
){
throw new \Exception;
}
$this->db->commit();
}catch(\Exception $e){
$this->db->rollback();
}
return false;
}
если я правильно понял, нужно вывести id диалогов в которых только эти два юзера?
ELECT m.`id`, m.`message`, (
select mr.`status`
from `messages_read` mr
where mr.`user_id` = 111 AND mr.`message_id` = m.`id`
) readed
FROM `messages` m
WHERE m.`chat_id` = 12
Я так же упоминал про сортировку. Она может меняться, и если посты будут выводиться с конца в начало, то "это раз" не сработает.