Не знаю как правильно построить SQL-запрос

206
12 февраля 2018, 01:52

Доброго времени суток! Прошу помочь, делаю себе проект, бэкенд на nodejs + sqlite. В проекте есть чат, без каналов, просто 1 на 1. В бэкенде очень слаб, поэтому не судите строго, может я неправильно таблицы построил. Есть такие таблицы:

db.run(`CREATE TABLE IF NOT EXISTS user (
  id integer PRIMARY KEY AUTOINCREMENT,
  firstName varchar(30),
  lastName varchar(50),
  email varchar(150),
  phone varchar(12),
  address varchar(255),
  photo varchar(255),
  hash varchar(255),
  token varchar(255)
)`);
db.run(`CREATE TABLE IF NOT EXISTS chat (
  id integer PRIMARY KEY AUTOINCREMENT,
  lastMessage varchar(255)
)`);
db.run(`CREATE TABLE IF NOT EXISTS chatUser (
  id integer PRIMARY KEY AUTOINCREMENT,
  idChat integer,
  idUser integer,
  FOREIGN KEY (idChat) REFERENCES chat(id) ON DELETE CASCADE,
  FOREIGN KEY (idUser) REFERENCES user(id) ON DELETE CASCADE
)`);
db.run(`CREATE TABLE IF NOT EXISTS message (
  id integer PRIMARY KEY AUTOINCREMENT,
  idChat integer,
  idUser integer,
  text varchar(255),
  FOREIGN KEY (idChat) REFERENCES chat(id) ON DELETE CASCADE,
  FOREIGN KEY (idUser) REFERENCES user(id) ON DELETE CASCADE
)`);

В chatUser я заношу всегда только двух пользователей,т.е. текущего пользователя и того, с кем переписываюсь. И я пытаюсь сделать запрос, из которого я получаю список чатов текущего пользователя, с именем и фото человека, с кем переписываюсь, с id чата и последним сообщением из этого чата. Получилось что-то такое:

db.all(`
  SELECT chatUser.idChat,
         user.firstName,
         user.lastName,
         user.photo,
         chat.lastMessage
  FROM user, chatUser, chat
  WHERE user.id = chatUser.idUser
  AND chat.id = chatUser.idChat
  AND user.id != ?
`, [id], function(error, chats) {
  ...
}

где id - это id текущего пользователя. Это работало, пока я не зашел с другого пользователя, у которого вместо одного чата выводит еще лишних два. Помогите пожалуйста построить запрос корректно, я больше ничего не придумал.

READ ALSO
Получить общий баланс пользователя

Получить общий баланс пользователя

Так я получаю общую сумму пользователя с ID 1, но мне нужно вывести пользователя у которого самый большой баланс

168
как лучше справиться с Out of memory exception

как лучше справиться с Out of memory exception

Приветствую всехДелаю небольшую програмку, которая работает с данными (читает файлы и создает свои), пишу на C#

243