Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1983 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MYSQL : update et select en une seule requête

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MYSQL : update et select en une seule requête

n°2347777
Stellvia_f​r
Posté le 13-03-2020 à 09:32:05  profilanswer
 

Bonjour,
 
Je voudrais faire une requete la plus optimisé possible qui enregistre l'ip du visiteur, augmente l'occurence de 1 si l'ip existe déjà, et aussi fait un select sur cette même occurence pour me permettre de traiter en PHP par la suite.
 
Donc j'ai déjà fait cela :
 

Citation :

INSERT INTO logs_ip(ip) VALUES('$ip_visiteur') ON DUPLICATE KEY UPDATE nombre = nombre + 1


 
En une seule requête j'enregistre l'ip et si l'ip existe déja je mets à jour la colonne nombre.
 
Je cherche le moyen en plus de cela de faire un select ( c'est a dire de connaitre la valeur de " nombre " de cette ip ) toujours en une seul requête, est-ce possible ?
 
https://tof.cx/images/2020/03/13/3decd702033ab3aa52fb6245ebdbe245.png


Message édité par Stellvia_fr le 13-03-2020 à 09:37:24
mood
Publicité
Posté le 13-03-2020 à 09:32:05  profilanswer
 

n°2347846
rufo
Pas me confondre avec Lycos!
Posté le 13-03-2020 à 16:34:48  profilanswer
 

Non, pas à ma connaissance.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2347867
pluj
Posté le 13-03-2020 à 17:57:27  profilanswer
 

Salut,
 
on devrait (j'ai partiellement testé) pouvoir détourner LAST_INSERT_ID comme suit :

Code :
  1. $bdd = new PDO(/* ... */);
  2. $stmt = $bdd->prepare('INSERT INTO logs_ip(ip) VALUES(?) ON DUPLICATE KEY UPDATE nombre = LAST_INSERT_ID(nombre + 1)');
  3. $stmt->execute([$_SERVER['REMOTE_ADDR']]);
  4. if ($stmt->rowCount() == 1) {
  5.    // c'était une insertion, nombre vaut donc 1 (la valeur mise en default sur la colonne nombre)
  6.    #$nombre = 1;
  7. } else /*if ($stmt->rowCount() == 2)*/ {
  8.    // c'était un UPDATE et nombre vaut $stmt->lastInsertId()
  9.    #$nombre = $stmt->lastInsertId();
  10. }


 
Avec un autre SGBD, on aurait la clause RETURNING.


Message édité par pluj le 13-03-2020 à 18:05:08

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MYSQL : update et select en une seule requête

 

Sujets relatifs
Excel - intégration de données JSON via requête sur site WEBMySQL
[MySQL] - Ajouter un champ calculé à une tableRequête ou interface avec cumul quotidien, hebdo, etc.
[Javascript] Désélectionner un choix d'un select[MySQL] Ajouter un nombre à une colonne null
Requete pour traitement de plusieurs ProjetsWooCommerce - Update Prix/Quantité
[MySQL] Extraction de champs Json[GSuits] UPDATE :Exporter des tableaux Gsheet dans ... SUITE.
Plus de sujets relatifs à : MYSQL : update et select en une seule requête


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR