[RESOLU] on duplicate key sur Primary Key composite

Eléphant du PHP | 103 Messages

04 déc. 2013, 16:22

Bonjour!
J'ai une table crée de cette façon :

Code : Tout sélectionner

"CREATE TABLE IF NOT EXISTS `proddata` (date DATE, heure TIME, prod INT, PRIMARY KEY(date, heure));"
Les données sont typiquement comme cela :
date - heure - prod
2013-11-27 - 10:09:08 - 578
2013-11-27 - 12:11:10 - 965
2013-11-27 - 15:14:13 - 123
J'ai deux besoins en insertion avec on duplicate key (ou autrement!) :
  • La première étant de n’insérer qu'une seule valeur par jour, ainsi je souhaite comparer selon la colonne DATE. En gros si j'envoi 2013-11-27 - 10:09:08 - 578 puis 2013-11-27 - 12:11:10 - 965 je n'aurais dans ma table que la dernière saisie, à savoir 2013-11-27 - 12:11:10 - 965.

    La seconde étant d’insérer autant de valeur par jour que nécessaire, ainsi je souhaite comparer selon la colonne DATE mais également HEURE. En gros si j'envoi 2013-11-27 - 10:09:08 - 578 puis 2013-11-27 - 12:11:10 - 965 j'aurais dans ma table toutes les lignes puisque à des horaires différents, à savoir 2013-11-27 - 10:09:08 - 578 et 2013-11-27 - 12:11:10 - 965.
Je ne sais pas comment faire ces deux systèmes, j'obtiens à chaque fois des doublons pour mon premier besoin, exemple :

Code : Tout sélectionner

$stmt = $pdo->prepare('INSERT INTO `proddata` (date, heure, prod) VALUES (str_to_date('.$date.',\'%Y%m%d\'), '.$heure.', '.$texte[1].') ON DUPLICATE KEY UPDATE date = VALUES(date)'); $stmt->execute();
Merci pour votre aide!!!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 déc. 2013, 22:47

salut,

c'est pas clair ton affaire.

tu ne peu pas avoir tes deux contrainte sur la table la seconde étant en contradiction avec la première.

Il faut vraiment définir le besoin final afin de trouver la solution adéquate.

si le but c'est d'afficher le max d'une journée tu peux le calculer.
un
select max(prod) from proddata where date = ... 
peux le faire.

Si les données sont des valeurs sur une période alors un
select sum(prod) from proddata groupe by date
te retournera la valeur ;)


@+
Il en faut peu pour être heureux ......