-- ============================================================= -- Project contacts: pick contacts from the linked companies -- (a project no longer shows ALL contacts of the customer) -- Table: yz_backend_crm_project -- 1) upstream_contact_ids : JSON array of contact IDs picked from -- the customer's address book (upstream). -- 2) downstream_contact_ids : JSON array of contact IDs picked from -- the counterpart's address book -- (downstream for type=2 / midstream for type=3). -- Contact details always come from yz_backend_erp_contact in real time; -- only the picked ID references are stored here. Empty array -> ''. -- Run: mysql -h -P -u -p < alter_project_contacts.sql -- (re-running only reports "Duplicate column name", which is safe) -- NOTE: keep this file ASCII-only; piping through some shells mangles non-ASCII. -- ============================================================= -- 可重复执行:列不存在时才执行 ALTER,已存在自动跳过(不再报 1060 Duplicate column)。 -- upstream_contact_ids SET @tbl := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_crm_project'); SET @col := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_crm_project' AND COLUMN_NAME = 'upstream_contact_ids'); SET @ddl := IF(@tbl > 0 AND @col = 0, 'ALTER TABLE `yz_backend_crm_project` ADD COLUMN `upstream_contact_ids` TEXT NULL COMMENT ''picked contact IDs (JSON array) from customer address book'' AFTER `downstream_phone`', 'DO 0'); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- downstream_contact_ids SET @col := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_crm_project' AND COLUMN_NAME = 'downstream_contact_ids'); SET @ddl := IF(@tbl > 0 AND @col = 0, 'ALTER TABLE `yz_backend_crm_project` ADD COLUMN `downstream_contact_ids` TEXT NULL COMMENT ''picked contact IDs (JSON array) from counterpart address book (downstream/midstream)'' AFTER `upstream_contact_ids`', 'DO 0'); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;