【发布时间】:2011-05-13 05:07:57
【问题描述】:
我需要一些认真的帮助。事情是这样的... 假设我有一个带有字段(userId,name)的“用户”表。现在我需要从与该用户相关的其他表中获取多项信息。有些物品相似,所以需要捆绑在一起。
现在我还有其他几个表:
CREATE TABLE app.phones (
`id` INT NOT NULL AUTO_INCREMENT ,
`userId` INT NOT NULL ,
`phone` VARCHAR( 16 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB;
CREATE TABLE app.emails (
`id` INT NOT NULL AUTO_INCREMENT ,
`userId` INT NOT NULL ,
`email` VARCHAR( 32 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB;
CREATE TABLE app.contact_methods (
`id` INT NOT NULL AUTO_INCREMENT ,
`userId` INT NOT NULL ,
`method` ENUM( 'phone', 'email' ) NOT NULL,
`methodId` INT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB;
CREATE TABLE app.groups (
`id` INT NOT NULL AUTO_INCREMENT ,
`groupName` VARCHAR( 16 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB;
CREATE TABLE app.users_groups (
`id` INT NOT NULL AUTO_INCREMENT ,
`userId` INT NOT NULL ,
`groupId` INT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB;
您可能已经猜到,每个用户都可以拥有多封电子邮件、多部电话并属于多个群组。如何使用上面的所有表格显示如下表格?
+---------+-------------+-------------------+--------------+
|name |phones |emails |groups |
+---------+-------------+-------------------+--------------+
|John Doe |123-555-0101,|johndoe@mail.com, |group1,group2,|
| |123-555-0909 |johndoe2@mail.com |group3 |
+---------+-------------+---------+---------+--------------+
更新:电子邮件和电话不应立即从他们的桌子上拿走。表 contact_methods 包含引用这些表的条目。
【问题讨论】: