允许重复数据MySQL

时间:2016-10-24 12:35:44

标签: php mysql

我正在使用名为Dolibarr的互联网应用程序,我想修改llx_cotisation表中的MySQL条件。

此表格不允许每位成员使用相同的联合日期。例如,我不能在同一天支付2个不同的cotisations的会员。因为字段dateadh对于成员来说可以是相同的。如果我尝试向第一个添加具有相同日期的其他cotisation,则会收到MySQL错误:

Duplicate entry '3-2016-01-01 00:00:00' for key 'uk_cotisation'

这是表结构:

mysql> describe llx_cotisation ;
+-------------+-----------+------+-----+-------------------+-----------------------------+
| Field       | Type      | Null | Key | Default           | Extra                       |
+-------------+-----------+------+-----+-------------------+-----------------------------+
| rowid       | int(11)   | NO   | PRI | NULL              | auto_increment              |
| tms         | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| datec       | datetime  | YES  |     | NULL              |                             |
| fk_adherent | int(11)   | YES  | MUL | NULL              |                             |
| dateadh     | datetime  | YES  |     | NULL              |                             |
| datef       | date      | YES  |     | NULL              |                             |
| cotisation  | double    | YES  |     | NULL              |                             |
| fk_bank     | int(11)   | YES  |     | NULL              |                             |
| note        | text      | YES  |     | NULL              |                             |
+-------------+-----------+------+-----+-------------------+-----------------------------+
9 rows in set (0.00 sec)

该字段为:dateadh

是否可以在那里复制价值?

php中的脚本部分如下:

   // List of subscriptions
    $sql = "
    SELECT d.rowid
         , d.login
         , d.firstname
         , d.lastname
         , d.societe
         , c.rowid as crowid
         , c.cotisation
         , c.dateadh
         , c.datef
         , c.fk_bank as bank
         , c.note
         , b.fk_account
      FROM ".MAIN_DB_PREFIX."adherent as d
         , ".MAIN_DB_PREFIX."cotisation as c
      LEFT 
      JOIN ".MAIN_DB_PREFIX."bank as b 
        ON c.fk_bank=b.rowid
     WHERE d.rowid = c.fk_adherent
     ";
    if (isset($date_select) && $date_select != '')
    {
        $sql.= " AND c.dateadh LIKE '".$date_select."%'";
    }
    if ($search_ref)
    {
            if (is_numeric($search_ref)) $sql.= " AND (c.rowid = ".$db->escape($search_ref).")";
            else $sql.=" AND 1 = 2";    // Always wrong
    }

非常感谢你,如果你能帮助我,我很抱歉我的英语非常糟糕:/

编辑:这是命令的结果:show create table llx_cotisation

| llx_cotisation | CREATE TABLE `llx_cotisation` (
  `rowid` int(11) NOT NULL AUTO_INCREMENT,
  `tms` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `datec` datetime DEFAULT NULL,
  `fk_adherent` int(11) DEFAULT NULL,
  `dateadh` datetime DEFAULT NULL,
  `datef` date DEFAULT NULL,
  `cotisation` double DEFAULT NULL,
  `fk_bank` int(11) DEFAULT NULL,
  `note` text,
  PRIMARY KEY (`rowid`),
  UNIQUE KEY `uk_cotisation` (`fk_adherent`,`dateadh`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 |

解决方案:

我删除了UNIQUE KEY,它看起来效果很好!

0 个答案:

没有答案