IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

MYSQL problème requéte toute simple


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Points : 1
    Points
    1
    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.

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    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 : 573
    Points : 915
    Points
    915
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    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

  4. #4
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    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 : 573
    Points : 915
    Points
    915
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é...

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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

  6. #6
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    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 : 573
    Points : 915
    Points
    915
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é...

Discussions similaires

  1. [MySQL] Requête toute simple
    Par YassVegas dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/10/2014, 03h03
  2. [MySQL] [MySQL] Problème requête
    Par adjaxio dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/04/2011, 17h06
  3. [MySQL] Erreur sur une requête toute simple
    Par JeromeC# dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/04/2011, 22h15
  4. Requête toute simple ? A moins que...
    Par Maxbo dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/09/2009, 15h46
  5. Problème tout simple : requête et liste déroulante
    Par Ellix dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/07/2007, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo