【发布时间】:2015-06-07 19:07:16
【问题描述】:
我需要检索两个用户之间的对话,但我不知道如何...我的结果有不需要的对话,我当前的 sql:
select *
from user_talk t1
inner join user_talk t2 on t2.id = t1.id
where
t1.talk_id = t2.talk_id and
(
t1.user_id = 1 or
t2.user_id = 4
);
此 sql 显示用户 1 和 4 之间的结果,但也显示用户 1 和用户 2 以及用户 2 和 65 之间的结果,但我只想要用户 1 和 4。
如何写出正确的sql?
编辑:user_talks
CREATE TABLE IF NOT EXISTS `reverse`.`user_talk` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`talk_id` INT(10) UNSIGNED NOT NULL,
`user_id` INT(10) UNSIGNED NOT NULL,
`type` VARCHAR(10) NOT NULL DEFAULT 'INVITED',
`status` VARCHAR(10) NOT NULL DEFAULT 'ACTIVE',
`created_at` TIMESTAMP NULL,
`updated_at` TIMESTAMP NULL,
PRIMARY KEY (`id`),
INDEX `fk_usertalk_1_idx` (`user_id` ASC),
INDEX `fk_usertalk_2_idx` (`talk_id` ASC),
INDEX `user_in_talk_idx` (`talk_id` ASC, `user_id` ASC),
CONSTRAINT `fk_usertalk_1`
FOREIGN KEY (`user_id`)
REFERENCES `reverse`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_usertalk_2`
FOREIGN KEY (`talk_id`)
REFERENCES `reverse`.`talk` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
谈话
CREATE TABLE IF NOT EXISTS `reverse`.`talk` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`created_at` TIMESTAMP NULL,
`updated_at` TIMESTAMP NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
消息
CREATE TABLE IF NOT EXISTS `reverse`.`message` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`talk_id` INT(10) UNSIGNED NOT NULL,
`sender_id` INT(10) UNSIGNED NOT NULL,
`receiver_id` INT(10) UNSIGNED NOT NULL,
`body` TEXT NOT NULL,
`status` VARCHAR(10) NOT NULL DEFAULT 'UNREAD',
`created_at` TIMESTAMP NULL,
`updated_at` TIMESTAMP NULL,
PRIMARY KEY (`id`),
INDEX `fk_message_1_idx` (`sender_id` ASC),
INDEX `fk_message_2_idx` (`receiver_id` ASC),
INDEX `fk_message_3_idx` (`talk_id` ASC),
CONSTRAINT `fk_message_1`
FOREIGN KEY (`sender_id`)
REFERENCES `reverse`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_message_2`
FOREIGN KEY (`receiver_id`)
REFERENCES `reverse`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_message_3`
FOREIGN KEY (`talk_id`)
REFERENCES `reverse`.`talk` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
【问题讨论】:
-
描述您的架构。你也只需要谈话或用户数据吗?
-
@FLefèvre 见表 sql。现在只是 user_talks 数据。谢谢!
-
还要描述您的
talk表。但我认为我的答案应该有效。 -
是的,你的回答很好。谢谢!
标签: php mysql sql select laravel