Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/03/2011, 17h59   #1
Invité de passage
 
Inscription : mars 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 3
Points : 0
Points : 0
Par défaut MYSQL problème requéte toute simple

Bonjour tous le monde
Je souhaite tout dabord m'excuser pour mon Orth qui vous aller le voir est asser pathétique !

Je suis un débutant en PHP et je n'ai malheureusement personne dans mon entourage qui pourrais m'aider sur mon projet

Alors voila je vous explique ce projet brièvement.

Je voudrais faire un système de vote entre deux photo, la personne qui veux voter a le choix entre deux de mes dessins que nous appèlerons dessin 1 et dessin 2 pour plus de facilitée ^^

Les personne vote pour les dessins et une fois leurs vote fait sa écrit le résultat du "duel" dans une base de donnée de maniéré :

ID Gagnant_ID Perdant_ID
1 13 12
2 5 19

bien entendu c'est un exemple


Voila ma problématique :
Pour le systéme de classement il rechercherai les ID un par un
il chercherai le nombre de fois ou il as était entré dans la "colonne" Gagnant_ID et dans la "colonne" Perdant_ID

La il ferai une soustraction du nombre de fois ou il est apparue dans les gagnant par le nombre de fois ou il est apparue dans les perdant

Donc au final j'aurai un résultat du genre :

1 15
2 5
3 25
4 18
.....

Et la il m'afficherai les ID (de la table dessin) suivis du nombre de victoire par ordre décroissant


J'espère que vous auriez compris se que je voulais dire et que vous pourriez m'aider =)

ps: je ne sais pas dutout comment procédé

Cordialement.
wallain59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 01h09   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
tout d'abord : est ce qu'une personne peut voter plusieurs fois ?
si ce n'est pas le cas, si l'utilisateur doit s'identifier pour voter, tu peux avoir une table vote avec pour chaque dessin l'id du votant et son vote, d’où ma seconde question : est ce que l'utilisateur peut voter dans les deux sens +1 et -1, auquel cas le champs correspondant au vote serait +1 ou -1 après quoi tu n'auras qu'à faire un SELECT SUM() sur le champs valeur et tu aurais un score pour chaque images....:
Code :
1
2
3
4
3 tables :
utilisateur(id_utilisateur,nom,prenom,...)
dessins(id_dessin,titre,....)
votes(#id_dessin, #id_utilisateur,valeur)
et si tu ne veux pas obliger les utilisateurs à s'inscrire mais qu'il ne peuvent voter qu'une fois, dans la table utilisateur tu ne renseigneras que leur adresse IP...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 01h22   #3
Invité de passage
 
Inscription : mars 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 3
Points : 0
Points : 0
Bonsoir.
Tout dabord je tiens a te remercier pour avoir pris le temps de me répondre


Je me suis certainement mal exprimer dans ma problèmatique

Les personnes se connectant sur le site peuvent voter a volonté jusqu'as ce qu'elle en as mare

J'avais fait un petit systeme de vote qui fesais un UPDATE dans ma Db mais si plusieurs personnes passé sur le même dessin en même temps ma valeur de l'UPDATE se retrouvé faussé

Donc j'ai opté pour un autre systeme, une sorte de table de LOG


Mon soucis est pour faire le classement, je doit "jongler" avec deux tables et malhereusement j'ai beaucoup de mal

Je n'arrive pas a faire mon code pour afficher mon classement


Pour un bien il doit aller me chercher le nombre de vote pour toutes les photos (vote gagnant et vote perdant) les additionner

pour la photo N° 2 ont as 15 vote, donc 15 ligne dans la DB
il faudrais qu'il me lie les 15 vote a l'ID de ma photo et trier par ordre décroissant
Tout sa afin d'arriver a faire un classement sous un principe de "log"

Voila j'espére m'être un peu mieux exprimer qu'ultérieurement
wallain59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 03h02   #4
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
si j'ai bien compris c'est une sorte de match entre deux dessins à chaque fois ?
si c'est le cas pour chaque vote un dessin est donné gagnant logiquement l'autre est perdant ?
Code :
1
2
3
 
pour le total des votes :
SELECT COUNT(Gagnant_ID) - (SELECT COUNT(Perdant_ID) FROM vote WHERE Perdant_ID = id de l'image) as resultat FROM vote WHERE Gagnant_ID = id de l'image
la table vote est celle avec les colonnes Perdant_ID et Gagnant_ID, tu obtiens ainsi le score que tu veux calculer pour chaque images que tu peux insérer dans la table résultat avec pour clé primaire l'id de l'image...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 12h44   #5
Invité de passage
 
Inscription : mars 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 3
Points : 0
Points : 0
Bonjour, j'ai regarder un peu le bout de code que tu as poster mais apparement sa ne passe pas

Il me met une erreur :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS tt FROM combat WHERE win_id='5'' at line 1


Je t'avourai que je n'ai pas compris ton code ^^

Je l'ai modifié pour adatper a ma base de donnée
J'ai noter le code suivant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
 
 
 
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('vote_photo',$db); 
 
//  $res = mysql_query("SELECT COUNT(*) AS total01 FROM combat WHERE win_id='$j' ")
$res = mysql_query("SELECT COUNT(win_id) FROM combat WHERE loose_id='1' AS tt FROM combat WHERE win_id='5'") OR die(mysql_error());
$row = mysql_fetch_assoc($res);
echo  $row['tt']  .'<br>';
 
?>
Voila et le 1er truc que j'avais tester fait mal au yeux, j'avourais que je suis complétement perdu dans se code qui est tout brouillon

Code :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
<style type="text/css">
body, html {font-family:Arial, Helvetica, sans-serif;width:100%;margin:0;padding:0;text-align:center;}
h1 {background-color:#600;color:#fff;padding:20px 0;margin:0;}
a {background-color:#600;color:#fff;padding:20px 0;margin:0;}
a img {border:0;}
td {font-size:11px;}
.image {background-color:#eee;border:1px solid #ddd;border-bottom:1px solid #bbb;padding:5px;}
 
 
</style>
 
<?php
	$db = mysql_connect('localhost', 'root', '');
	mysql_select_db('vote_photo',$db);
	 $sql= "SELECT COUNT(*) AS total FROM combat";
 
$res = mysql_query('SELECT COUNT(*) AS total FROM combat') OR die(mysql_error());
$row = mysql_fetch_assoc($res);
 
	 $nb_id = $row['total'];
	mysql_close();
 
 
	$db = mysql_connect('localhost', 'root', '');
	mysql_select_db('vote_photo',$db);
	 $sql= "SELECT COUNT(*) AS total01 FROM photo";
 
$res = mysql_query('SELECT COUNT(*) AS total01 FROM photo') OR die(mysql_error());
$row = mysql_fetch_assoc($res);
echo  $row['total01'];
	 $nb_id1 = $row['total01'];
	mysql_close();
 
?> 
 
 
<h1>Classement</h1>
 
<?php
	$db = mysql_connect('localhost', 'root', '');
	mysql_select_db('vote_photo',$db);
	//$sql= "SELECT * FROM combat WHERE ID ORDER BY RAND() LIMIT 2";
	$sql= "SELECT * FROM photo ";
	//$sql = 'SELECT * FROM photo WHERE ID="$idd"';
	// on envoie la requête
	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
	// on fait une boucle qui va faire un tour pour chaque enregistrement
	while($data = mysql_fetch_assoc($req))
		{
		// on affiche les informations de l'enregistrement en cours
 
 
		$ID[] = $data['ID'];
		$nom[] = $data['nom'];
 
 
		}
	// on ferme la connexion à mysql
	mysql_close();
 
 
 
	//nb_id1 est le nombre total d'ID de photo
 
 
 
	$db = mysql_connect('localhost', 'root', '');
 
	mysql_select_db('vote_photo',$db);
 
	//$sql= "SELECT * FROM combat WHERE ID ORDER BY RAND() LIMIT 2";
	$sql= "SELECT * FROM combat ";
	//$sql = 'SELECT * FROM photo WHERE ID="$idd"';
	// on envoie la requête
	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
	// on fait une boucle qui va faire un tour pour chaque enregistrement
	while($data = mysql_fetch_assoc($req))
		{
		// on affiche les informations de l'enregistrement en cours
 
 
		$win[] = $data['win_id'];
		$loose[] = $data['loose_id'];
 
 
		}
	// on ferme la connexion à mysql
	mysql_close();
 
 
		$tt = $nb_id -1;
 
		$bb = $nb_id1 ;
 
for ($i = 0; $i <= $tt; $i++) {
 
 
 
 
 
	}
	echo count($win, 1)."<br>";
 
	for ($j = 1; $j <= $bb; $j++) {	
 
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('vote_photo',$db); 
$res = mysql_query("SELECT COUNT(*) AS total01 FROM combat WHERE win_id='$j' ") OR die(mysql_error());
$row = mysql_fetch_assoc($res);
echo  $row['total01'].' - ' .$j .'<br>';
 
 
mysql_close();
 
	}
 
	?>
	<br>

Donc la en gros il me trie par ID des photos
et compte le nombre de "duel" gagner par tel ou tel dessin mais ne soustrait pas le nombre total de defaites

C'est le code que j'avais commencer hier matin, mais bon il est bouré d'erreur, pas complet, bref la catastrophe
wallain59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 17h27   #6
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
Code :
SELECT COUNT(win_id) - (SELECT COUNT(loose_id) FROM combat WHERE loose_id = 5 ) as resultat FROM combat WHERE win_id = 5
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h10.


 
 
 
 
Partenaires

Hébergement Web