0

我有这两张桌子:

CREATE TABLE `users`
(
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR (80) NOT NULL,
`email` VARCHAR (150) NOT NULL,
`password` VARCHAR (80) NOT NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE `messages`
(
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sender_id` INT NOT NULL,
`receiver_id` INT NOT NULL,
`message` VARCHAR (300) NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`is_read` TINYINT(1) NOT NULL DEFAULT 0, 
PRIMARY KEY (`id`),
FOREIGN KEY (`sender_id`) REFERENCES users (id),
FOREIGN KEY (`receiver_id`) REFERENCES users (id)
);

我想选择我已向其发送消息或已向我发送消息的用户。

为此,我创建了一个在查询请求中有我的 userId 的控制器:

static getAllWithMessages(req, res) {
    UsersModel.findAllBy(
      [req.query.userId, req.query.userId, req.query.userId],
      (err, results) => {
        if (err) {
          res.status(500).send(err);
        }
        res.send(results);
      }
    );
  }

并尝试此选择:

db.query(
      "SELECT users.id, users.name, users.email FROM users RIGHT JOIN messages AS messages_send ON (users.id = messages_send.sender_id) RIGHT JOIN messages AS messages_received ON (users.id = messages_received.receiver_id) WHERE users.id <> ? AND (messages_send.receiver_id = ? OR messages_received.sender_id = ?) GROUP BY users.id ORDER BY name ASC ",
      where,
      callback
    );

但我只有向我发送消息的用户。我不知道如何添加我已发送消息的用户...我知道我的请求非常糟糕 :(

如果你有一些想法:)

谢谢

4

1 回答 1

0
SELECT DISTINCT users.id, users.name, users.email
FROM messages
JOIN users ON users.id IN (messages.sender_id, messages.receiver_id)
WHERE @your_id IN (messages.sender_id, messages.receiver_id);

@your_id您需要查找其对话者的用户的 ID 在哪里。

于 2020-11-17T10:20:10.530 回答