-1

我有一个用户表。我有一张认证表​​。

每个用户可以拥有多个认证。认证有一个 user_id 外键。

  1. 如何在一个查询中选择用户及其所有认证?
  2. 如何选择获得认证的用户?

用户表:

CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `username` varchar(24) default NULL,
  `displayname` varchar(24) default NULL,
  `email` varchar(64) default NULL,
  `password` text,
  `signup_date` int(11) default NULL,
  `signup_ip` varchar(15) default NULL,
  `hash` text,
  `verified` tinyint(1) default '0',
  `last_login` int(11) default NULL,
  `logins` int(11) default NULL,
  `status` text,
  `recovery_hash` text,
  `recovery_initiated` int(11) default NULL,
  `last_updated` int(11) default NULL,
  `signup_method` text,
  `signup_question` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

认证表:

CREATE TABLE `certifications` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `user_id` int(11) unsigned NOT NULL,
  `number` varchar(128) default NULL,
  `board` varchar(128) default NULL,
  `company` varchar(128) default NULL,
  `website` varchar(128) default NULL,
  PRIMARY KEY  (`id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `certifications_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

感谢您的阅读。

4

2 回答 2

3

使用 join 获取 id 为 1 的用户的所有证书。

SELECT b.id as certification_id 
FROM users AS a
LEFT JOIN certifications AS b
ON a.id = b.user_id
WHERE a.id = 1;

使用内部联接获取所有具有认证的用户。所有没有证书的用户都将退出。

SELECT a.id as users_with_certifications
FROM users as a
JOIN certifications AS b
ON a.id = b.user_id; 
于 2012-06-01T18:52:25.680 回答
3

如何在一个查询中选择用户及其所有认证?

SELECT *
FROM certifivations C
LEFT JOIN users U
ON C.user_id = U.id
WHERE U.id=USERID

如何选择获得认证的用户?

SELECT *
FROM certifivations C
JOIN users U
ON C.user_id = U.id
GROUP BY U.id
于 2012-06-01T18:54:07.093 回答