{MySQL} insertion données si condition
Fermé
Ade
-
19 févr. 2010 à 11:50
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010 - 11 mars 2010 à 14:59
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010 - 11 mars 2010 à 14:59
A voir également:
- {MySQL} insertion données si condition
- Excel cellule couleur si condition texte - Guide
- Insertion liste déroulante excel - Guide
- Insertion signature word - Guide
- Insertion sommaire word - Guide
- Mysql community server - Télécharger - Bases de données
15 réponses
blux
Messages postés
26452
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
10 novembre 2024
3 312
19 févr. 2010 à 11:55
19 févr. 2010 à 11:55
Salut,
je rajouterais un WHERE dateua NOT IN (select dateua from notifications) ou un truc approchant...
Et pourquoi ta clé primaire ne serait pas le jour ?
je rajouterais un WHERE dateua NOT IN (select dateua from notifications) ou un truc approchant...
Et pourquoi ta clé primaire ne serait pas le jour ?
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
19 févr. 2010 à 12:48
19 févr. 2010 à 12:48
Parce que je peux avoir plusieurs fois la même IP et plusieurs fois la même date !
blux
Messages postés
26452
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
10 novembre 2024
3 312
19 févr. 2010 à 13:05
19 févr. 2010 à 13:05
ben non, parce que si tu as plusieurs fois la même date, tu ne veux pas insérer les données, c'est ce que tu as dit au début...
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
19 févr. 2010 à 13:05
19 févr. 2010 à 13:05
es tu callé en requêtes SQL ?
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
19 févr. 2010 à 14:28
19 févr. 2010 à 14:28
Pardon je n'avais pas vu ta réponse !
Oui en effet !
j'explique
- je lance mon url qui lance un ping automatique qui me renvoi OK ou KO
- j'insère ces données dans ma table avec la date du jour .
Si je relance mon url dans la journée pour vérifier si c'est tjr OK ou KO et bien je ne veux pas que ces données soient une nouvelle fois insérées dans la table car elles y sont déjà
Mais si le résultat du ping à changé faire un UPDATE mais que sur le OK ou KO
c'est clair ou pas du tout ?? LOL
Oui en effet !
j'explique
- je lance mon url qui lance un ping automatique qui me renvoi OK ou KO
- j'insère ces données dans ma table avec la date du jour .
Si je relance mon url dans la journée pour vérifier si c'est tjr OK ou KO et bien je ne veux pas que ces données soient une nouvelle fois insérées dans la table car elles y sont déjà
Mais si le résultat du ping à changé faire un UPDATE mais que sur le OK ou KO
c'est clair ou pas du tout ?? LOL
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
blux
Messages postés
26452
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
10 novembre 2024
3 312
19 févr. 2010 à 14:45
19 févr. 2010 à 14:45
Pour moi, le problème est simple :
- ta table a pour clé primaire date+ip
- tu lances ton script
- tu récupères le résultat et tu essaies de faire un UPDATE de l'état, si c'est possible, alors pas de problème, sinon, c'est que le couple date+ip n'existe pas, donc tu fais une création
- ta table a pour clé primaire date+ip
- tu lances ton script
- tu récupères le résultat et tu essaies de faire un UPDATE de l'état, si c'est possible, alors pas de problème, sinon, c'est que le couple date+ip n'existe pas, donc tu fais une création
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
19 févr. 2010 à 14:50
19 févr. 2010 à 14:50
OK et en script ça donne quoi si ce n'est pas trop te demander s'il te plaît ??
blux
Messages postés
26452
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
10 novembre 2024
3 312
19 févr. 2010 à 15:33
19 févr. 2010 à 15:33
Je ne suis pas assez balaise en PHP...
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
19 févr. 2010 à 16:13
19 févr. 2010 à 16:13
Dommage
Merci encore
Merci encore
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
26 févr. 2010 à 11:38
26 févr. 2010 à 11:38
Bonjour,
juste un p'tit UP !!
j'ai fais pleins de tests est ça ne fonctionne pas;
Je réexplique :
je voudrais faire un test sur la colonne Date de la table
si elle est vide et différente de la date du jour INSERT
SINON UPDATE
merci d'avance
juste un p'tit UP !!
j'ai fais pleins de tests est ça ne fonctionne pas;
Je réexplique :
je voudrais faire un test sur la colonne Date de la table
si elle est vide et différente de la date du jour INSERT
SINON UPDATE
merci d'avance
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
3 mars 2010 à 08:13
3 mars 2010 à 08:13
UP!! SVP
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
11 mars 2010 à 09:52
11 mars 2010 à 09:52
Bonjour,
Je me permets de refaire appel à vous car je suis toujours bloquée sur ce problème !
Je re pose le problème :
1ere requête :
$query = "SELECT DISTINCT ENTITE FROM ua";
$rsult = mysql_query($query) or die("Erreur dans l'extraction des informations(entite from ua)<br>");
while ($row = mysql_fetch_array($rsult)){
$entite = $row[0];
2eme requête dépendante de la 1ere :
$quer = "SELECT AdresseIP,SourceMAJ FROM ua WHERE ENTITE='$entite'";
$resul = mysql_query($quer) or die("Erreur dans l'extraction des informations<br>");
while ($row = mysql_fetch_array($resul)){
$ip = $row[0];
$source = $row[1];
Test PING sur la source pour voir si OK ou KO :
/*test ping*/
system ("ping $source -n 1 >null",$return);
ensuite une fois tous ces tests effectués je dois insérer les résultats dans une autre table.
SAUF que je souhaiterai que ces résultats soient insérés SI ET SEULEMENT la colonne DATE de la seconde table est vide ou n'est pas égale à la date du jour avec $today = date("Y-m-d");
requête insertion :
$isrt = "INSERT INTO notifications (AdresseIP,SourceMAJ,DateUA,ETAT) VALUES ('$ip','$source','$today','$u')";
Merci d'avance pour vos réponses !
Je me permets de refaire appel à vous car je suis toujours bloquée sur ce problème !
Je re pose le problème :
1ere requête :
$query = "SELECT DISTINCT ENTITE FROM ua";
$rsult = mysql_query($query) or die("Erreur dans l'extraction des informations(entite from ua)<br>");
while ($row = mysql_fetch_array($rsult)){
$entite = $row[0];
2eme requête dépendante de la 1ere :
$quer = "SELECT AdresseIP,SourceMAJ FROM ua WHERE ENTITE='$entite'";
$resul = mysql_query($quer) or die("Erreur dans l'extraction des informations<br>");
while ($row = mysql_fetch_array($resul)){
$ip = $row[0];
$source = $row[1];
Test PING sur la source pour voir si OK ou KO :
/*test ping*/
system ("ping $source -n 1 >null",$return);
ensuite une fois tous ces tests effectués je dois insérer les résultats dans une autre table.
SAUF que je souhaiterai que ces résultats soient insérés SI ET SEULEMENT la colonne DATE de la seconde table est vide ou n'est pas égale à la date du jour avec $today = date("Y-m-d");
requête insertion :
$isrt = "INSERT INTO notifications (AdresseIP,SourceMAJ,DateUA,ETAT) VALUES ('$ip','$source','$today','$u')";
Merci d'avance pour vos réponses !
Darkito
Messages postés
1191
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
545
11 mars 2010 à 10:17
11 mars 2010 à 10:17
Bonjour,
Pourquoi faire la première requête ?
Tu récupère l'ensemble des entité pour ensuite reprendre les enregistrements associés à ces entités.
Autant prendre tous les enregistrements dès le départ non ?
Ta variable $row est réaffecter au sein de ton while, ce qui peut poser des problèmes...
Voici une piste pour ton problème :
Pourquoi faire la première requête ?
Tu récupère l'ensemble des entité pour ensuite reprendre les enregistrements associés à ces entités.
Autant prendre tous les enregistrements dès le départ non ?
Ta variable $row est réaffecter au sein de ton while, ce qui peut poser des problèmes...
Voici une piste pour ton problème :
$quer = "SELECT AdresseIP,SourceMAJ FROM ua"; $resul = mysql_query($quer) or die("Erreur dans l'extraction des informations<br>"); while ($row = mysql_fetch_array($resul)) { $ip = $row[0]; $source = $row[1]; /*test ping*/ system ("ping $source -n 1 >null",$return); /* On teste si l'enregistrement est déjà présent $sql = "SELECT * FROM notifications WHERE AdresseIP='".$ip."' AND DateUA='".$today."'"; $res = mysql_query($sql) or die("Erreur dans l'extraction des informations<br>"); if ( mysql_num_rows($res) > 0 ) { $isrt = "UPDATE notifications SET ETAT='".$u."' WHERE AdresseIP='".$ip."' AND DateUA='".$today."'"; } else { $isrt = "INSERT INTO notifications (AdresseIP,SourceMAJ,DateUA,ETAT) VALUES ('$ip','$source','$today','$u')"; } mysql_query($isrt); }
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
11 mars 2010 à 10:42
11 mars 2010 à 10:42
Et bien voila je viens encore de passer pour une c.... !! lol
En tout cas merci beaucoup c'est très sympa !!
Bonne journée
En tout cas merci beaucoup c'est très sympa !!
Bonne journée
elghafoud
Messages postés
121
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
29 avril 2013
18
11 mars 2010 à 14:43
11 mars 2010 à 14:43
La solution de Darkito est très bien et sinon, tu crée une seule clé primaire du style "dateIP" en suite tu fais le traitement avec sql et non avec php :
Exemple :
CREATE TABLE notifications (DateIp int UNSIGNED NOT NULL PRIMARY KEY,
SourceMAJ timestamp NOT NULL,
ENTITE ....
--------- la boucle pour pinger ----------
system ("ping $source -n 1 >null",$return);
INSERT INTO notifications VALUES('la date du jour et ip entité', ....
ON duplicate KEY UPDATE ETAT="nouveau statut";
---------- fin de boucle ----------------
Exemple :
CREATE TABLE notifications (DateIp int UNSIGNED NOT NULL PRIMARY KEY,
SourceMAJ timestamp NOT NULL,
ENTITE ....
--------- la boucle pour pinger ----------
system ("ping $source -n 1 >null",$return);
INSERT INTO notifications VALUES('la date du jour et ip entité', ....
ON duplicate KEY UPDATE ETAT="nouveau statut";
---------- fin de boucle ----------------
liadea
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
11 mars 2010 à 14:59
11 mars 2010 à 14:59
Bonjour,
Merci c'est sympa de t'être pris la tête sur mon problème , en effet oui ça pourrait être plus simple.
Malheureusement on m'a imposé le nombre de table donc voila je fais avec.
Bonne journée
Merci c'est sympa de t'être pris la tête sur mon problème , en effet oui ça pourrait être plus simple.
Malheureusement on m'a imposé le nombre de table donc voila je fais avec.
Bonne journée
19 févr. 2010 à 12:10
ça ne fonctionne pas , pas grave j'ai pleins d'autres problèmes j'vais m'attarder sur ça !!
la date du jour ne peux pas être en clé primaire car je peux l'avoir plusieurs fois en fonction du nombre d'ip pinguer et KO !!
Merci encore
Bonne journée
19 févr. 2010 à 12:39