[RESOLU] on duplicate key sur Primary Key composite

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] on duplicate key sur Primary Key composite

Re: on duplicate key sur Primary Key composite

par moogli » 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 ;)


@+

on duplicate key sur Primary Key composite

par josse34 » 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!!!!