【发布时间】:2016-03-09 11:59:09
【问题描述】:
我正在将数据从数据库传输到另一个数据库。原始表具有以下结构(其中key contact 是布尔值):
+------------+-----------+-------------+
| contact_id | school_id | key_contact |
+------------+-----------+-------------+
| 1 | 1 | 1 |
| 2 | 2 | 0 |
| 3 | 2 | 1 |
| 4 | 2 | 1 |
| 5 | 3 | 0 |
+------------+-----------+-------------+
我想让它变成以下形状,其中display_order 是与school_id 的复合唯一索引:
+------------+-----------+---------------+
| contact_id | school_id | display_order |
+------------+-----------+---------------+
| 1 | 1 | 1 |
| 2 | 2 | 3 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 3 | 1 |
+------------+-----------+---------------+
逻辑是如果key_contact = 1 那么display_order 应该为1,除非contact_id 与相同的school_id 已经有一个display_order 的值为1,那么它应该插入下一个增量可用school_id 独有的值。然后,我想插入所有联系人,其中key_contact = 0 将下一个可用的key_contact 整数分配给school_id。
我为这两列创建了唯一索引:
UNIQUE KEY `contact_school_display_order_school_id_unique` (`display_order`,`school_id`)
我尝试过使用INSERT... ON DUPLICATE KEY UPDATE,但我真的想要在重复键上将插入值的值增加到school_id 唯一的下一个整数。
任何指针将不胜感激。
【问题讨论】:
-
如果没有学校的主要联系人怎么办,例如您的示例中具有 school_id=3 的学校?
-
@PaulSpiegel where key_contact = 0 并且它是学校的唯一联系人,那么它的 display_order 应该是 1。所有联系人都应该有一个显示顺序,但关键联系人的排名应该更高(更低号码!)比同一所学校的非关键联系人。
标签: mysql