Problème Base de données

Résolu
famillelulu -  
lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


Je voudrais créer une base de données relationnelle « sondage ». Cette base de données me donne quelques soucis de création. Je suis un peu perdu dans la création des tables. Le résultat doit être stocké sous forme de %. Aucun calcul ne doit être effectué pour la lecture une application enverra les données dans cette base « résultat ». Mon problème est de les différencier dans des tables. Je ne sais pas comment prendre en compte une comparaison entre 2 personnes, 3 personnes, 4 personnes, voir jusqu’à 10 personnes, puisque les résultats seront toujours différents en fonction du nombre de personne sélectionnée.

Voici un exemple qui me pose problème :

Quelle est l’actrice que vous trouver la plus jolie parmi celle cité ci-dessous ?

 Keira Knightley
 Eva Green

Résultat obtenue

 Keira Knightley 55 %
 Eva Green 45 %

Même question avec 4 actrices.

 Keira Knightley
 Sophie Marceau
 Eva Green
 Elisha Cuthbert

Résultat :

 Keira Knightley 28 %
 Sophie Marceau 25 %
 Eva Green 24 %
 Elisha Cuthbert 23 %


Merci de votre aide
A voir également:

6 réponses

lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
 
bonsoir il s'agit de base mysql ,accsess ou autres ?

en rajoutant un champ "compteur" par exemple qui s'incremente à chaqque fois que quelqu'un clic sur une valeur ça devrais pouvoir le faire..
0
famillelulu
 
Bonsoir,

Base de données Mysql. Mon problème est à la lecture, si un internaute désire comparé 2 actrices, il aura pour chacune un résultat, si il compare 3 actrice il aura bien sur un autre résultat puisque le total s'effectue sur 100 %. je pense qui me faut une table actrice, une table résultat mais pour les comparaisons je ne sais pas.
0
lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
 
ok, ca doit pas etre bien compliqué ,sauf que je comprends pas ce que tu veut obtenir ?? 10 h de codes dans les neurones ça abime son monde.. lol !!

sérieusement tu veut connaitre quoi ?
combien de gens on voté pour tel ou tel choix ou c'est autre chose ?
0
famillelulu
 
Je veux connaitre et afficher les résultats sur une page Internet en fonction d'une comparaison entres actrices. Si je compare 2 actriceS j'ai un résultat, si je compare 3 actrices (les 2 premières + une nouvelle) j'ai un autre résultat puisque le résultat est toujours sur 100 %.

Actuellement je possède les tables suivantes :

Categorie
id categorie (exemple 1)
nom categorie (exemple People)

Disciple
id discipline (exemple : 1)
nom discipline (exemple actrice)

identifiant
id identifiant (exemple 18)
nom identifiant (exemple sophie marcaux)

résultat
id résultat (exemple 8)
résultat (je ne sais pas puisque que le résultat doit s'effectuer par rapport à un autre ou plusieurs actrices donnant un résultat de 100% sur toutes les personnes sélectionnées)


Quelles tables supplémentaires dois-je crée, sachant que je peux faire une comparaison entre 2 et 10 personnes ?

Merci
0
lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
 
Si je compare 2 actriceS j'ai un résultat, si je compare 3 actrices (les 2 premières + une nouvelle) j'ai un autre résultat puisque le résultat est toujours sur 100 %.
oui ça c'est logique c'est le principe du pourcentage.

en fait tu veut ramener le % obtenu pour chaque vote a un entier qui represente le nbr de vote pour chzaque actrice ?

ex;
avec 2 actrices
actrice1 50 % ==> 1 vote
actrice 2 50% ==> 1vote

avec 3actrices
actrice1 15 % ==> 1 vote
actrice 2 15 % ==> 1vote
actrice 3 70% ==>2 votes

c'est ça ?
0
famillelulu
 
Oui c'est tout à fait ça
0
lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
 
en rajoutant comme je le disais au debut un champ que j'appelerais vote par exemple et qui s'incremente quand on clique sur le choix qu'on a fait et une variable $vote qui est a 0 ou 1.
quand tu recupere tes valeurs ça donnerais un truc un peu comme ça
$actrice=$_post['actrice'];

dans ta table actrice tu rajoute le champ vote et tu fait une redquete de modif de l'ID de ton actrice
d'abord tu recupere la valeur du champ vote

$req="select champ_vote  from table_actrice where nom_artiste='$actrice' ";
$res=mysql_query($req);
while(list($champ_vote)=mysql_fetch_array($res)) ; 
{
$vote+=$champ_vote; //la variable s'incremente
}

//ensuite on  fait l'update en rajoutant 1 a $vote

$vote++;
$req="update table_actrice set champ_vote='$vote' where nom_actrice=$actrice " ;
$res=mysql_query($res);



voila ca devrais le faire ,il y a plein d'autres manieres je pense ,la je t'ai detaillé le principe bien sur il peut etre fait plus plus simplement en placant sur ta page dans un champ caché ,au moment de l'affichage des noms d'artistes,directement la valeur du champ vote et comme ça si la checbox est cochée (je suppose que c'est des check boxs..) la variable vote augmente


en esperant t'avoir aidé un peu
0
famillelulu
 
Merci de ta réponse mais c'est d'abord la base que je dois créer et je possède toujours le même problème de compréhension sur la création de mes tables. Je me suis mal exprimé, je vais essayer d’expliquer le problème d’une autre façon.

Plutôt que de partir sur la création du sondage, je vais partir sur la lecture du sondage. L’internaute ouvre une page web. Dans cette page il choisi la catégorie People – actrice. Dans la catégorie actrice il peut comparer les actrices qu’il désire. Le problème c’est que l’internaute peut comparer de 2 à 10 actrices.

Exemple A :

Actrice 1 = 55 %
Actrice 2 = 45 %

Ou

Exemple B :

Actrice 1 = 38 %
Actrice 2 = 30 %
Actrice 3 = 22 %


Dans l’exemple B on voit que les actrices 1 et 2 on changé de % puisque nous avons ajouté une nouvelle actrice. L’internaute peux choisir de comparer 2 ou plusieurs actrices (jusqu’a 10). Il peut décider de comparer l’actrice 2, 3 et 4 ou 1, 2, 3, 4 et 5. L’internaute à le droit d’effectuer toutes les comparaisons possibles (qui dit toutes comparaisons, dit un résultat différent pour chaque situation puisque le % est toujours sur 100)

Voici mes tables, je pense qu’il me manque une table ou des champs dans certaines tables. Merci de ton aide car je ne sais pas comment je dois m’y prendre.

Table Categorie
id categorie
nom categorie

Table Disciple
id discipline
nom discipline


Table Identifiant
id identifiant
nom identifiant

Table Résultat
résultat
id résultat (exemple 8)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
 
ok je vois...

alors je t'ai cree 3 bases.
le principe est simple
une table actrice qui contient un ID,le nom,le prenom,le nbr de vote et 3 champs categorie (car je suppose qu'une meme actrice peut etre dans plusieurs catégorie,bien sur il peut y en avoir plus..)

une table categorie avec un ID,nom categorie

et une la plus grosse la table resultat qui contient un ID ,10id_actrice et 10 id categorie (comme tu peut avoir le choix entre 10 possibilité par vote) ,la date du vote,le %

ensuite il faut faire tes requetes sur ce principe:
je selectionne une categorie==>je recupere l'ID
a partir de la je fait une recherche dans la table actrice pour recuperer toutes celles qui on l'id_categorie et les afficher

l'internaute fait son choix et la je recupere chaque id (actrice,categorie) que j'insere dans la table resultats
je recupere aussi la date du vote et calcule le %
a chaque fois qu'une actrice est votée j'increment le champ vote de la table actrice de +1

Ca parait compliqué comme ça mais tu verras c'est assez simple ,ce ne sont que des requetes du type select * from actrice where id_actrice=$id_actrice

avec des selects et des checbox cela devrait le faire


je te colle les codes de creations de table


--
-- Structure de la table `categorie`
--
CREATE TABLE `categorie` (
  `ID_Categorie` int(11) NOT NULL auto_increment,
  `Nom_Categorie` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`ID_Categorie`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Structure de la table `actrice`
--
CREATE TABLE `actrice` (
  `ID_Actrice` int(11) NOT NULL auto_increment,
  `Nom_Actrice` varchar(255) NOT NULL default '',
  `Prenom_Actrice` varchar(255) NOT NULL default '',
  `Cat1` int(11) NOT NULL default '0',
  `Cat2` int(11) NOT NULL default '0',
  `Cat3` int(11) NOT NULL default '0',
  `Vote_Actrice` bigint(16) NOT NULL default '0',
  PRIMARY KEY  (`ID_Actrice`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


--
-- Structure de la table `resultats`
--
CREATE TABLE `resultats` (
  `ID_Resultat` int(11) NOT NULL auto_increment,
  `ID_Actrice1` int(11) NOT NULL default '0',
  `ID_Categorie1` int(11) NOT NULL default '0',
  `ID_Actrice2` int(11) NOT NULL default '0',
  `ID_Categorie2` int(11) NOT NULL default '0',
  `ID_Actrice3` int(11) NOT NULL default '0',
  `ID_Categorie3` int(11) NOT NULL default '0',
  `ID_Actrice4` int(11) NOT NULL default '0',
  `ID_Categorie4` int(11) NOT NULL default '0',
  `ID_Actrice5` int(11) NOT NULL default '0',
  `ID_Categorie5` int(11) NOT NULL default '0',
  `ID_Actrice6` int(11) NOT NULL default '0',
  `ID_Categorie6` int(11) NOT NULL default '0',
  `ID_Actrice7` int(11) NOT NULL default '0',
  `ID_Categorie7` int(11) NOT NULL default '0',
  `ID_Actrice8` int(11) NOT NULL default '0',
  `ID_Categorie8` int(11) NOT NULL default '0',
  `ID_Actrice9` int(11) NOT NULL default '0',
  `ID_Categorie9` int(11) NOT NULL default '0',
  `ID_Actrice10` int(11) NOT NULL default '0',
  `ID_Categorie10` int(11) NOT NULL default '0',
  `Date_Vote` datetime NOT NULL default '0000-00-00 00:00:00',
  `Pourc_vote` decimal(10,0) NOT NULL default '0',
  PRIMARY KEY  (`ID_Resultat`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


en esperant t'aider un peu

ps suivant la version de ton serveur ou de ton PMA si tu a un message d'erreur vire cette partie dans le code de creation
ENGINE=MyISAM DEFAULT CHARSET=latin1
0
famillelulu
 
Lewis34 merci pour ta réponse mais cela ne peut pas fonctionner car une actrice peut être comparé à 1 ou 9 autres actrices, on peut décider de la comparer par 2, 3,4,8 dans l'ordre que l'on désire. Toutes les comparaisons sont possibles ce qui représente pour une actrice une centaine de comparaison différente et donc une centaine de résultats différents.

Pour la création de la base, il ne faut plus que je me base sur le sondage mais sur la création des tables car lorsque je pourrais intégrer tous ces résultats dans des champs, je trouverais un moyen pour effectuer le sondage.
0
lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
 
bonsoir ,je pense que cela peut fonctionner car les 3 tables que je t'ai cree ont toutes des champs reliés,je m'explique.
une actrice est differenciée par son Id mais aussi par sa categorie ,c'est pour ca que je t'ai mis 10 champs categorie attaché a un id actrice.
et une table 'simple" categorie pour connaitre grace a son id a quelle categorie l'actrice fait reference.
on peut rajouter dans l'absolu une table discipline (je te l'ai pas mise car je savais pas a quoi elle correspondait)
Par contre c'est evident que cela fait une "tripotée" de possibilité ,mais les requetes sont faites pour ça.. ;-)

je prends un exemple
id categorie=1
nom catgeorie=cinema
id categorie=2
nom catgeorie=musique

id actrice=1
nom_actrice=A
id categorie1=1
id_categorie2=2
id_categorie3=0

id actrice=2
nom_actrice=B
id categorie1=1
id_categorie2=0
d_categorie3=0

d actrice=3
nom_actrice=C
id categorie1=2
id_categorie2=0
d_categorie3=0

donc la j'ai 3 actrices une ,la A,qui est classé dans 2 categories en meme temps(cinema et musique)
une autre juste classée en cinema et la troiseme juste en musique


je reprends ton exemple du 1er post
Quelle est l’actrice que vous trouver la plus jolie parmi celle cité ci-dessous ?

 A
 B
 C
a partir de la à chaque fois qu'un internaute clique sur un choix dans la table resultat tu va inserer en fonction du nombre d'item (de choix d'actrices) le choix de l'internaute==> 1 enregistrement dans table_resultat equivaut au choix total de l'internaute.
ainsi si il choisi 1 seul actrice il n'y aura que le champ ID_Actrice1`qui sera rempli et avec l'id categorie associé a cette actrice je sais dans quelle categorie la mettre.
si il choisi 9 actrices il y aura les champs ID_Actrice1 à ID_Actrice9 qui seront remplis,ainsi que les champs id_actegorie respectif
quand au champ vote pour chaque actrice choisi il augmente de 1 dans la table actrice
ensuite c'est simple de faire une reqquete pour recuperer les elements dont tu a besoins pour ton sondage

actriceA 15 % ==> 1 vote
actrice B 15 % ==> 1vote
actrice C 70% ==>2 votes

tu peut savoir la categorie la plus voté,tu peut trier par date etc... ensuite tout dépend ce que tu veut faire..

C'est l'interet des tables d'avoir un ID unique comme ça ou que tu soit dans ton programme en effectuant une requete tu sais exactement à quoi correspond l'id que tu a sans etre obligé de trainer des tonnes de variables

ici au maximun tu aura une vingtaine de variable
10 si le type veut comparer les 10 actrices (+10 id categories)
1 pour la date
1 pour l'id de l'enregistrement du resultat

et avec ça tu pourra creer tes requetes en fonctions de ce que tu recherche a faire exactement.

Par contre c'est sur qu'il faudra "pisser du code" pour faire les requetes et utiliser les jointures entre tables.

Bon c'est pas execivement sorcier à faire,mais c'est du boulot.
0