【发布时间】:2018-02-09 09:35:12
【问题描述】:
我使用 sqlite 数据库处理我的项目。在项目中有一个聊天,没有频道,只有一对一。这些是表格:
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。这一直有效,直到我来自另一个用户,他不是一个聊天,而是显示两个额外的聊天。请帮助我正确构建查询。
【问题讨论】:
-
您正在寻找的是一个 JOIN,它基于一个列连接两个表,即用户 ID。不幸的是,做 table1, table2, table3 并没有那么有效。看; sqlitetutorial.net/sqlite-inner-join