[mysql] insertion si pas dans la table
9 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
- lesbonsplansdesophie
- WRInaute passionné

- Messages: 518
- Inscription: Lun Mar 01, 2004 10:04
[mysql] insertion si pas dans la table
Bonjour a tous,
J'ai une table tres simple de la forme suivante:
Mon probleme est le suivant, je cherche une query simple en mysql qui me permet de:
1) si l'objet n'est pas present dans la table (par ex. orange), je l'insere et ma table devient
2) si l'objet est deja la (ex. pomme), j'update la ligne correspondante et ma table devient
Y'a t'il un moyen de faire ca avec une seule requete qui ne soit pas trop lente (ma table contient plusieurs milliers d'objets) ?
Merci d'avance !
J'ai une table tres simple de la forme suivante:
- Code: Tout sélectionner
objet | quantité
poire | 1
pomme | 3
abricot | 5
Mon probleme est le suivant, je cherche une query simple en mysql qui me permet de:
1) si l'objet n'est pas present dans la table (par ex. orange), je l'insere et ma table devient
- Code: Tout sélectionner
objet | quantité
poire | 1
pomme | 3
abricot | 5
orange | 1
2) si l'objet est deja la (ex. pomme), j'update la ligne correspondante et ma table devient
- Code: Tout sélectionner
objet | quantité
poire | 1
pomme | 4
abricot | 5
Y'a t'il un moyen de faire ca avec une seule requete qui ne soit pas trop lente (ma table contient plusieurs milliers d'objets) ?
Merci d'avance !
- lesbonsplansdesophie
- WRInaute passionné

- Messages: 518
- Inscription: Lun Mar 01, 2004 10:04
merci pour ton aide - j'aurais peut-etre du preciser pour des raisons techniques "objet" n'est pas un index de la table, auquel cas ca ne marche plus... ou j'ai pas tout compris ?
- lesbonsplansdesophie
- WRInaute passionné

- Messages: 518
- Inscription: Lun Mar 01, 2004 10:04
...et l'autre chose c'est que quand bien meme je pourrais me debrouiller pr que ce soit un index, si je ne m'abuse avec replace je remplace (comme son nom l'indique) la ligne existante - je ne la modifie pas pour ajouter 1 a ma colonne quantité comme précisé plus haut.... a moins que la encore je ne sois a la masse ??
http://dev.mysql.com/doc/refman/5.0/en/replace.html
Il te faut faire effectivement un SELECT pour récupérer la clé (logique tu me diras)
Il te faut faire effectivement un SELECT pour récupérer la clé (logique tu me diras)
- lesbonsplansdesophie
- WRInaute passionné

- Messages: 518
- Inscription: Lun Mar 01, 2004 10:04
...et pour finir si tu regardes bien c'est extremement gourmant en ressources (cf le dernier commentaire sur http://dev.mysql.com/doc/refman/5.0/en/replace.html) donc pas exactement ce qu'il me faut pour une table de plusieurs centaines de milliers d'objets... bref je crois que je vais rester a ma requete en deux parties, meme si ca me satisfait moyen.
- lesbonsplansdesophie
- WRInaute passionné

- Messages: 518
- Inscription: Lun Mar 01, 2004 10:04
on est d'accord 
Je pense que ça peut se faire avec une requête UPDATE en premier lieu et une requête d'INSERTION en 2ème lieu.
Je suppose que ta base contient déjà un certains nombres d'articles et qu'il y aura plus souvent des mises à jour a faire sur les quantités plutôt que des insertions de nouveaux objets.
En partant de ce principe il vaut mieux faire en premier la requête d'UPDATE (sans se soucier si l'objet existe déjà):
mysql_query("UPDATE objet SET quantite=quantite+1 WHERE 'ta condition par ex : objet= blabla' ");
Ensuite tu testes si la requête a affecté une ligne et tu dis que si aucune ligne n'a été affecté par la requete précédente alors tu insère un nouvel objet:
if (mysql_affected_rows()==0)
mysql_query("INSERT INTO objet (champ1,champ2,...) VALUES (valeur1,valeur2,...)");
Je ne sais pas si c'est la solution que tu as retenue mais voilà comment j'aurais fait
Je suppose que ta base contient déjà un certains nombres d'articles et qu'il y aura plus souvent des mises à jour a faire sur les quantités plutôt que des insertions de nouveaux objets.
En partant de ce principe il vaut mieux faire en premier la requête d'UPDATE (sans se soucier si l'objet existe déjà):
mysql_query("UPDATE objet SET quantite=quantite+1 WHERE 'ta condition par ex : objet= blabla' ");
Ensuite tu testes si la requête a affecté une ligne et tu dis que si aucune ligne n'a été affecté par la requete précédente alors tu insère un nouvel objet:
if (mysql_affected_rows()==0)
mysql_query("INSERT INTO objet (champ1,champ2,...) VALUES (valeur1,valeur2,...)");
Je ne sais pas si c'est la solution que tu as retenue mais voilà comment j'aurais fait
9 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- GoogleStats : analyse temps réel des visites de Google sur votre site
- Les pays gérés par la Google Toolbar 2.0
- Yahoo Slurp et autres robots d'indexation de Yahoo
- Sortie officielle de GoogleStats v2.0 !
- Services et outils de Yahoo! Search
- Parts de marché des moteurs aux USA (Octobre 2006)
- Gestion des langues et des sessions en PHP / MySQL
- Les visiteurs de WRI apprécient Firefox
- Agent Web Ranking v.2.6.2 s'ouvre à l'Asie
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités



le forum