Difference between revisions of "VbzCart/tables/cust names"
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
|  (moved from "customer tables" page) |  (useful query) | ||
| (3 intermediate revisions by the same user not shown) | |||
| Line 2: | Line 2: | ||
| * '''History''': | * '''History''': | ||
| ** '''2009-07-09''' moved to separate wiki page; no design changes | ** '''2009-07-09''' moved to separate wiki page; no design changes | ||
| + | ** '''2011-11-23''' added WhenEnt, WhenUpd | ||
| + | * '''Notes''': | ||
| + | ** (2011-11-23) Possibly WhenUpd should be removed and replaced with one or both of: | ||
| + | *** WhenCnf (when confirmed) -- stamp whenever a new order is received that contains this email | ||
| + | *** WhenEdt (when edited) -- stamp whenever an admin saves the record | ||
| + | **: same for {{l/vc/table|cust_phones}} and {{l/vc/table|cust_emails}} | ||
| ==SQL== | ==SQL== | ||
| − | < | + | <source lang=mysql>CREATE TABLE `cust_names` ( | 
|    `ID`         INT NOT NULL AUTO_INCREMENT, |    `ID`         INT NOT NULL AUTO_INCREMENT, | ||
| + |   `WhenEnt`    DATETIME     NOT NULL COMMENT "date when record was first created", | ||
| + |   `WhenUpd`    DATETIME DEFAULT NULL COMMENT "date when record was last updated", | ||
|    `ID_Cust`    INT COMMENT "core_custs.ID", |    `ID_Cust`    INT COMMENT "core_custs.ID", | ||
|    `Name`       VARCHAR(127) COMMENT "customer's name, for shipping label", |    `Name`       VARCHAR(127) COMMENT "customer's name, for shipping label", | ||
| Line 11: | Line 19: | ||
|    PRIMARY KEY(`ID`) |    PRIMARY KEY(`ID`) | ||
| ) | ) | ||
| − | ENGINE =  | + | ENGINE = InnoDB;</source> | 
| − | < | + | ==Utility== | 
| + | SQL query to get a list of cust records with multiple names: | ||
| + | <source lang=mysql>SELECT  | ||
| + |     g.*, n.Name | ||
| + | FROM | ||
| + |     (SELECT  | ||
| + |         c.ID, COUNT(n.ID) AS NameCount, GROUP_CONCAT(n.ID) AS NameIDs | ||
| + |     FROM | ||
| + |         cust_names AS n | ||
| + |     LEFT JOIN cust AS c ON n.ID_Cust = c.ID | ||
| + |     GROUP BY c.ID | ||
| + |     HAVING COUNT(n.ID) > 1) AS g | ||
| + |         LEFT JOIN | ||
| + |     cust_names AS n ON g.ID = n.ID_Cust | ||
| + | WHERE | ||
| + |     n.ID IS NOT NULL | ||
| + |     ORDER BY g.ID | ||
| + | </source> | ||
Latest revision as of 01:05, 3 July 2019
About
- History:
- 2009-07-09 moved to separate wiki page; no design changes
- 2011-11-23 added WhenEnt, WhenUpd
 
- Notes:
- (2011-11-23) Possibly WhenUpd should be removed and replaced with one or both of:
- WhenCnf (when confirmed) -- stamp whenever a new order is received that contains this email
- WhenEdt (when edited) -- stamp whenever an admin saves the record
 - same for cust_phones and cust_emails
 
 
- (2011-11-23) Possibly WhenUpd should be removed and replaced with one or both of:
SQL
CREATE TABLE `cust_names` (
  `ID`         INT NOT NULL AUTO_INCREMENT,
  `WhenEnt`    DATETIME     NOT NULL COMMENT "date when record was first created",
  `WhenUpd`    DATETIME DEFAULT NULL COMMENT "date when record was last updated",
  `ID_Cust`    INT COMMENT "core_custs.ID",
  `Name`       VARCHAR(127) COMMENT "customer's name, for shipping label",
  `NameSrch`   VARCHAR(127) COMMENT "name with delimiters removed, for matching",
  `isActive`   BOOL DEFAULT FALSE COMMENT "NO=wrong spelling or name; use for searching",
  PRIMARY KEY(`ID`)
)
ENGINE = InnoDB;
Utility
SQL query to get a list of cust records with multiple names:
SELECT 
    g.*, n.Name
FROM
    (SELECT 
        c.ID, COUNT(n.ID) AS NameCount, GROUP_CONCAT(n.ID) AS NameIDs
    FROM
        cust_names AS n
    LEFT JOIN cust AS c ON n.ID_Cust = c.ID
    GROUP BY c.ID
    HAVING COUNT(n.ID) > 1) AS g
        LEFT JOIN
    cust_names AS n ON g.ID = n.ID_Cust
WHERE
    n.ID IS NOT NULL
    ORDER BY g.ID