gpt4 book ai didi

mysql - 在一个查询中检索用户信息时检查是否暂停

转载 作者:行者123 更新时间:2023-11-29 22:41:58 25 4
gpt4 key购买 nike

我有两个表,一个帐户表和一个暂停表。与其首先在登录时检索其信息,然后再进行另一个查询来检查是否有事件暂停,不如将两个查询合并并在一个查询中检查两者?

如果用户没有主动暂停,此查询当前不会返回任何行,而我不希望它这样做。我希望它为 suspension 表字段返回一个空结果,然后返回所有信息。

SELECT `account`.`username`, `suspension`.`user_id` FROM `account`,`suspension` WHERE `account`.`user_id` = 5 OR `suspension`.`user_id` = 5

这将返回 0 个结果。如果没有 suspension 部分,它将返回用户的用户名。我希望它返回用户名,以及该字段的空 suspension.user_id0(如果可能的话):

用户名 => 测试,
user_id => 0

CREATE TABLE `account` (
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(12) NOT NULL,
`password` char(32) NOT NULL,
`email_address` varchar(250) NOT NULL,
`creation_date` int(11) unsigned NOT NULL,
`creation_ip` varchar(25) NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `username` (`username`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `suspension` (
`user_id` int(10) unsigned NOT NULL,
`suspension_reason` tinyint(1) NOT NULL DEFAULT '0',
`suspension_date` int(10) unsigned NOT NULL,
`suspension_expire` int(10) unsigned NOT NULL,
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

最佳答案

您想使用Mysql Join将引用用户 ID 的两个表连接在一起。

账户表

CREATE TABLE `account` (
`id` INT UNSIGNED AUTO_INCREMENT,
`username` VARCHAR(10) NOT NULL,
PRIMARY KEY(`id`)
);

悬挂台

CREATE TABLE `suspension` (
`user_id` INT UNSIGNED DEFAULT NULL,
FOREIGN KEY (`user_id`) REFERENCES account(`id`) ON DELETE CASCADE ON UPDATE CASCADE
);

查询

SELECT A.username, A.id FROM `account` AS A 
LEFT JOIN `suspension` AS S ON S.user_id = A.id
WHERE A.id = 5 AND S.user_id IS NULL;

如果用户处于暂停状态,则不会返回任何结果。如果用户没有被暂停,则返回用户结果。要返回用户及其暂停状态,您可以使用以下查询。

SELECT A.username, A.id, (S.user_id IS NOT NULL) AS `suspended` FROM `account` AS A 
LEFT JOIN `suspension` AS S ON S.user_id = A.id
WHERE A.id = 5;

关于mysql - 在一个查询中检索用户信息时检查是否暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com