Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 19/08/2006, 14h31   #1
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Par défaut [SQL] Elaboration d'un classement

Bonjour à tous !

Voilà je débute en programmation et je planche sur un petit problème depuis quelques temps qui est d'établir un classement par département en fonction du nombre d'inscrits. Tous les post sont les bienvenus

Aussi pour se faire j'ai mis en place deux bases de données :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 "CREATE TABLE $mbmembre (
  id int(11) NOT NULL auto_increment,
  hid int(11) NOT NULL default '0',
  sid int(11) NOT NULL default '0',            -------------> code département
  nom varchar(80) NOT NULL default '',
  url varchar(150) NOT NULL default '',
  email varchar(80) NOT NULL default '',
  PRIMARY KEY  (id)
) 
";
 
"CREATE TABLE $mbdepartement (
  id int(11) NOT NULL auto_increment,
  hid int(11) NOT NULL default '0',
  nom varchar(80) NOT NULL default '',
  photo text NOT NULL,
  PRIMARY KEY  (id)
) 
";
la base 'mbmembre' inscrit l'internaute qui entre ses infos et choisi entre les différents départements de la base 'mbdepartement' préalablement remplie:

Code :
1
2
$sids = mysql_query("SELECT * FROM $mbdepartement");
while ($myrow = mysql_fetch_row($sids)) {
Le dilemne serait [sur une page] d'établir un classement en fonction du nombre de départements enregistrés, et de faire appel simultanément aux deux bases de données où le code sid des membres ,relatif à son département, serait remplacé par le nom du département.

Concrètement j'aimerais arriver au résultat suivant


Nom Inscrit Evolution

Eure 5 +2places
Sarthe 4 +1place
Orne 2 =
Iles et Vilaine 1 -2 places

.....


Merci d'avance de votre aide et disponibilité !
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2006, 14h34   #2
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Re,

J'oubliais, hier après un petit tour sur les forums et l'étude approximative d'un tuto traitant de clé étrangère et jointure, j'ai réflechi et je fléchis. Voici ma réflexion :

>>Je dois établir un classement par département en fonction du nombre d'inscrits à partir de deux tables différentes.

Pour se faire, je dois calculer le nombre de 'sid' de ma table 'mbmembre' et associer le nombre de 'sid' obtenu pour chaque département au 'nom' de la table 'mbdepartement' correspondant.

Concernant le classement je tente :

Code :
1
2
 
"SELECT [le 'nom' de ma table 'mbdepartement], [nombre 'sid' par catégorie de 'mbmembre'] FROM 'mbmembre' et 'mbdepartement' BY [nbre de 'sid'] DESC;
Help me please :p

Merci d'avance
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2006, 15h56   #3
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 66
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 66
Points : 39
Points : 39
Par défaut la requete

salut
m --> la table des mebre et
dep --> table des dep

voici la requte sql :

Code :
1
2
3
4
5
6
7
SELECT dep.nom,count( * ) AS nb
FROM dep
JOIN m
WHERE m.sid = dep.id
GROUP BY dep.id
order by nb desc
LIMIT 0 , 30
ca calcule le nombre des membre pour chaque departement et serra donée dans l'ordre . du premier au dernier .

mais il ya un truc , pour l'evolution il faudra sans doute une autre table pour staocker le nombre de personne inscrite a une date arrété ..
bref te me dirra ce que tu en pense
php4life est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2006, 15h04   #4
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Merci php4life ! La méthode est bonne est les résultats s'affichent comme je le souhaite
Cependant, lorsque j'ouvre la page de résultat, le classement omet automatiquement une entrée. J'ai pas pu déterminer si ça venait de l'id. Concrètement pour afficher 10 résultats, la page m'en montrera que 9...

Voici le code de la page :

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
 
 
<?php
include ("page_haut.inc");
include ("configuration.php");
 
$select='SELECT sbbsouscat.nom,count( * ) AS nombre FROM sbbsouscat JOIN sbbproduit WHERE sbbproduit.sid = sbbsouscat.id GROUP BY sbbsouscat.id ORDER BY nombre desc LIMIT 0 , 30';
	$result=mysql_query($select) or die ('Erreur : '.mysql_error() ); 
	$row = mysql_fetch_array($result);
    $nombre = $row['nombre'];
 
 
 
echo '<table bgcolor="#FFFFFF">'."\n"; 
        // première ligne on affiche les titres prénom et surnom dans 2 colonnes 
        echo '<tr>'; 
        echo '<td bgcolor="#669999"><b><u>Pays</u></b></td>'; 
		echo '<td bgcolor="#669999"><b><u>Inscription(s)</u></b></td>';
        echo '</tr>'."\n"; 
    // lecture et affichage des résultats sur 2 colonnes     
    while($row = mysql_fetch_array($result)) { 
        echo '<tr>'; 
		echo '<td bgcolor="#CCCCCC">'.$row['nom'].'</td>';
		echo '<td bgcolor="#CCCCCC">'.$row['nombre'].'</td>';
        echo '</tr>'."\n"; 
    } 
    echo '</table>'."\n"; 
 
 
?>
Je pense que le problème est tout bête, enfin j'espère Voilà encore merci
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2006, 15h32   #5
Membre expérimenté
 
Avatar de papyphp
 
Inscription : avril 2005
Messages : 425
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Belgique

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 425
Points : 545
Points : 545
Salut,

C'est à cause des deux lignes en rouge.
Tu fais un premier appel à mysql_fetch_array(), ça incrémente le compteur interne et quand tu fais ton while, il commence à la deuxième ligne.

Citation:
$select='SELECT sbbsouscat.nom,count( * ) AS nombre FROM sbbsouscat JOIN sbbproduit WHERE sbbproduit.sid = sbbsouscat.id GROUP BY sbbsouscat.id ORDER BY nombre desc LIMIT 0 , 30';
$result=mysql_query($select) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_array($result);
$nombre = $row['nombre'];

echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr>';
echo '<td bgcolor="#669999"><b><u>Pays</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Inscription(s)</u></b></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 2 colonnes
while($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td bgcolor="#CCCCCC">'.$ro...
Bonne continuation
__________________
Lu kinze d' awousse, la Vierje arandje û dusbrôle lu timp. Et ce coup ci, elle ne nous a pas ratés
papyphp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2006, 16h04   #6
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Donc si j'ai bien compris, je remplace mysql_fetch_array par mysql_num_rows par exemple C'est ça ?
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2006, 16h18   #7
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Nan en fait j'ai pas bien compris ! Je suis sur php débutant qui explique la signification de chaque fonction et là j'avoue que je suis un peu paumée J'ai saisi ton idée 'Papyphp' mais je saisi pas par quoi le remplacer ...
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2006, 16h30   #8
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Bon c'est encore moi! juste pour vous dire que mon problème était résolu:
J'ai remplacé $row = mysql_fetch_array($result); par $row = mysql_query($result);

Et finalement le while j'ai remplacé par mysql_fetch_assoc qui semblait conseillé dans la plupart des cas!
Voilà merci à php4life et Papyphp ,
Tout ceci m'ouvre d'autres pistes de travail pour la semaine prochaine
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2006, 19h28   #9
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 66
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 66
Points : 39
Points : 39
bah ca serrai bien de mettre [resolut] dans le titre du topic :p
ca eviterai a beaucoup de personne de lire des centaines de lignes de codes pour rien hahahahéé
de rien !
php4life est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2006, 23h34   #10
Membre du Club
 
Inscription : février 2006
Messages : 99
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 99
Points : 59
Points : 59
non c'etait bon c'est juste que tu appelais 2 fois la fonction mysql_fetch_array donc il passait directement a l'enregistrement 2 et le 1 on l'oubliait

tu n'as juste qu'à remplacer ces 2 lignes
Citation:
$row = mysql_fetch_array($result);
$nombre = $row['nombre'];
par
Citation:
$nombre = $result[0]['nombre'];
si je dis pas de betises
Link3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 00h49   #11
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Oups j'avais pas vu, désolée ! Mais je vois que les modérateurs s'en sont chargés pour moi
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h29.


 
 
 
 
Partenaires

Hébergement Web