[MySQL] Requete imbriqué

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 : [MySQL] Requete imbriqué

Re: [MySQL] Requete imbriqué

par BaLiSTiK » 21 juil. 2010, 13:54

Merci de ta réponse mais j ai choisi le passage par sous-requete pour être sure que l utilisateur augmente bien de 1. J m explique, imaginons nous avons un utilisateur qui veut rajouter +1 alors qu'il y a déjà 5 d'enregistrées.
Au même moment, d'autres utilisateurs rajoutent +1. Donc dans la base de données, la valeurs enregistrée sera de 5 + x .
Mais notre premier utilisateur lui ne verra que 5, et si il clique, il faut que ce soit un 5 +x + 1 (son click) et non pas un 5 + 1.
C est pour ça que ma requete ajoute +1 a la valeur enregistrée dans la table.

Mais peut-être que je me complique la vie comme tu dis :). Je vais tester ta solution ^^.

EDIT : effectivement, je me suis pris la tête pour rien :| ...
Merci pour le coup de pouce :). ça regle de plus mon soucis postgresql/mysql ^^.

Re: [MySQL] Requete imbriqué

par Ganesh » 21 juil. 2010, 13:12

Bonjour,

Pourquoi se compliquer la vie avec une sous-requête ? Cette solution fonctionnera aussi bien avec postgresql qu'avec mysql:
UPDATE ffb_articles SET vote_plus = vote_plus + 1 WHERE id_article = x;
UPDATE ffb_articles SET vote_moins = vote_moins + 1 WHERE id_article = x;
Sinon, j'aurais également tendance à simplifier le code php :
$vote = ($type == 'plus') ? 'vote_plus' : 'vote_moins';
$sql = "UPDATE ".PFX."articles SET $vote = $vote + 1 WHERE id_article = $this->__getIdArticle()";

[MySQL] Requete imbriqué

par BaLiSTiK » 21 juil. 2010, 10:04

Bonjour,

Dans le cadre du développement de mon CMS Blog, j ai ajouté un systême +/- sur les article (comme c'est la mode en ce moment ^^).
Ma requête fonctionne nickel sous PostgreSQL mais pas sous MySQL. J ai plus ou moins compris pourquoi, sauf que je ne sais pas comment la modifier pour rendre cette requete SQL compatible avec les 2 SGBD.
Le principe est que lorsque que quelqu'un clique sur (+) ou (-), j'incrémente de 1 le champ dans la table en sélectionnant dans une sous-requête, la valeur enregistrée.

Les requetes telles quelles, fonctionnant avec postgres :
UPDATE ffb_articles SET vote_plus = (SELECT vote_plus FROM ffb_articles where id_article = x)+1 WHERE id_article = x;
UPDATE ffb_articles SET vote_moins = (SELECT vote_moins FROM ffb_articles where id_article = x)+1 WHERE id_article = x;
Code PHP de ma méthode
$sql = 'UPDATE ' . PFX . 'articles SET ';
switch($type){
	case 'plus' : 
		$sql .= 'vote_plus = (SELECT vote_plus FROM ' . PFX . 'articles where id_article = '. $this->__getIdArticle() . ')+1';
	break;
		
	case 'moins' : 
		$sql .= 'vote_moins = (SELECT vote_moins FROM ' . PFX . 'articles where id_article = '. $this->__getIdArticle() . ')+1';
	break;		
}
$sql .= ' WHERE id_article ='.$this->__getIdArticle();
Une des solutions seraient de faire une première requete récupérant la valeur dans les champs mais je suis pas tres fan, je préfère tout récupérer en une fois.

Merci d'avance ^^