在同一个ID

时间:2015-09-11 19:04:34

标签: php jquery mysql

我需要创建Chart analist,我想记录当天所做的事情。我到处寻找,找不到如何工作,我找到了一些但不好插入,这里我有代码

$mysqli->query('
INSERT INTO chart_sales (date, sales_order) VALUES (Now(), sales_order +1) 
ON DUPLICATE KEY UPDATE sales_order =VALUES(+1)');
 $rslt = mysql_query($stmt);

如何记录当天所做的事情,以及如果你再设定另一个日期以生成另一个ID?

这是我的DATABASE TABEL

-- ----------------------------
-- Table structure for `chart_sales`
-- ----------------------------
DROP TABLE IF EXISTS `chart_sales`;
CREATE TABLE `chart_sales` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL DEFAULT '0000-00-00',
  `sales_order` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of chart_sales
-- ----------------------------
INSERT INTO `chart_sales` VALUES ('1', '2015-09-11', '1');
INSERT INTO `chart_sales` VALUES ('2', '2015-09-11', '1');
INSERT INTO `chart_sales` VALUES ('3', '2015-09-11', '1');
INSERT INTO `chart_sales` VALUES ('4', '2015-09-11', '1');

1 个答案:

答案 0 :(得分:3)

一些语法错误。以下是你拍摄的内容:

INSERT INTO chart_sales (date, sales_order) VALUES (Now(), someValue) 
ON DUPLICATE KEY UPDATE sales_order =sales_order +1

date上需要唯一键

它的工作关键是架构必须具有现有的唯一键,无论是Primary Key(PK)还是unique key,它都是冲突候选者。在你的情况下,你所拥有的只是PK。您需要date

上的 UNIQUE KEY

clash可以有许多唯一的候选键,只需要一个。

因此,如果您没有提供重复的ID,那么它将是INSERT。如果有clash,那么UPDATE就会发生。

注意:clash表示尝试否则会违反唯一性,这在这里是一件好事,因为声明,UPDATE会发生。

全部放在一起

CREATE TABLE `chart_sales` (
  `id` int(11) AUTO_INCREMENT primary key,
  `date` date NOT NULL,
  `sales_order` int(11) NOT NULL,
  unique key(`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `chart_sales` (date,sales_order) VALUES ('2015-09-11',1) on duplicate key update sales_order=sales_order+1;
INSERT INTO `chart_sales` (date,sales_order) VALUES ('2015-09-22',1) on duplicate key update sales_order=sales_order+1;
INSERT INTO `chart_sales` (date,sales_order) VALUES ('2015-09-22',1) on duplicate key update sales_order=sales_order+1;
INSERT INTO `chart_sales` (date,sales_order) VALUES ('2015-09-22',1) on duplicate key update sales_order=sales_order+1;

...

select * from chart_sales;
+----+------------+-------------+
| id | date       | sales_order |
+----+------------+-------------+
|  1 | 2015-09-11 |           1 |
|  2 | 2015-09-22 |           3 |
+----+------------+-------------+
2 rows in set (0.00 sec)