[MySQL] Requete imbriqué

Eléphant du PHP | 398 Messages

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 ^^
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Eléphant du PHP | 55 Messages

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()";

Eléphant du PHP | 398 Messages

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 ^^.
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe