Bonjour à tous,
Dans le cadre d'un système de validations de photos j'ai la structure de table (volontairement simplifiée) suivante :
Le système est basé sur une double validation des images.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 -- Table lignes CREATE TABLE IF NOT EXISTS `images` ( `id` int(11) NOT NULL auto_increment, PRIMARY KEY (`id`), ) ; -- Structure de la table `versions` CREATE TABLE IF NOT EXISTS `versions` ( `id` int(11) NOT NULL auto_increment, `image_id` int(11) default NULL, `fichier` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ; -- Structure de la table `validations` CREATE TABLE IF NOT EXISTS `validations` ( `id` int(11) NOT NULL auto_increment, `version_id` int(11) default NULL, `utilisateur_id` int(11) default NULL, `valeur` int(1) NOT NULL, PRIMARY KEY (`id`), KEY `version_id` (`version_id`), KEY `utilisateur_id` (`utilisateur_id`) ) ;
Une ligne possède n versions qui possède n validations.
Une "image" est considérée comme validée si elle possède une "version" ayant 2 "validations" avec le champ valeur à 1 (ou somme de validations.valeur = 2). Une photo est rejetée si la somme est égale à -2. Si égal à 0, on provoque un arbitrage.
J'éprouve quelques difficultés à réaliser des requêtes du type :
RETOURNE toutes les images à valider ( par encore de validations associées à la version || score = 1 || score = -1)
RETOURNE toutes les images validée (score = 2)
RETOURNE toutes les images rejetéé (score = -2)
etc...
car je dois faire une requête avec jointure (jusque ici tout va bien), mais tenant compte d'une agrégation du type SUM(validations.valeur). J'ai réussi à me débrouiller pour le 2è et 3è exemple avec des IN des HAVING et des sous requêtes mais c'est loin d'être satisfaisant à mon sens.
J'espère avoir été compréhensible, merci d'avance pour votre aide !
Partager