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 01/11/2011, 22h24   #1
Membre à l'essai
 
Inscription : février 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 57
Points : 22
Points : 22
Par défaut Requête Count dans Select

Bonjour,
Je cherche à introduire une requête count au sein d'une boucle while qui fetch une requête select.

En gros je crée un forum basique.
j'arrive à récupérer les informations (comme le titre, le message, ect) mais au moment de définir le nombre de réponses par exemple, pas moyen, je trouve pas comment faire.

Un petit coup de main svp ?

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
 
	echo'<table width="60%" border="1" align="center" bgcolor="#CCCCCC" cellspacing="1" cellpadding="0">
  <tr>
    <td>Nom</td>
  </tr>';
 
 
 
$reponse = $bdd->query('SELECT * FROM Forum');
 
while ($donnee = $reponse->fetch())
 
{
echo '<tr>
    <td>';   
	echo '<strong><a href="VoirForum.php?Forum='. $donnee['ID'] .'">' . $donnee['NomForum'] . '</a></strong> <br/>';
echo $donnee['Description'] . '<br/><br/>'; 
 
echo $Nbr;
}
$reponse->closeCursor();
 
echo '</td></tr>';
 
 
echo'</table>';
Phrederik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 08h54   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 644
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 644
Points : 2 641
Points : 2 641
Bonjour,

Votre méthode est horrible.

Comment détermine-t-on le nombre de réponses ?
Il faut que vous nous présentiez un peu plus les tables existantes, car là on ne peux pas deviner ce qui ce cache derrière tout ca.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 09h08   #3
Membre à l'essai
 
Inscription : février 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 57
Points : 22
Points : 22
En ma méthode est horrible ?

Ma base contient 3 table
1 user
1 NomForum
1 message
Le count doit contenir le nombre de message qui porte identifiant du forum choisit : id_liaison_forum
Phrederik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 09h22   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 644
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 644
Points : 2 641
Points : 2 641
Elle n'est pas bonne car vous traitez d'une manière itérative le problème alors que vous utilisez le langage SQL qui lui est ensembliste.

Alors sur des petites volumétries vous ne verrez rien de spécial, par contre si votre forum grossit ça va devenir catastrophique.


Bref,

Je pars du principe que id_liaison_forum est présent dans votre table "message" sinon il faudra faire des jointures.

Code :
1
2
3
4
 
select id_liaison_forum, count(*)
from message
group by id_liaison_forum
Un appel à cette requête et vous aurez tout en mémoire du côté de votre applicatif (et pas besoin du coup de faire X requêtes à chaque fois)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 12h41   #5
Membre à l'essai
 
Inscription : février 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 57
Points : 22
Points : 22
J'aurais peut être dû préciser que ceci est un projet uniquement destiné à mettre en pratique mon apprentissage du php et sql (bref je suis un noob^^)

J'ai essayer de comprendre et voici ce qui en ressort.
Code php :
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
 
echo'<table width="60%" border="1" align="center" bgcolor="#CCCCCC" cellspacing="1" cellpadding="0">
  <tr>
    <td>Nom</td>
	 <td>Messages</td>
  </tr>';
 
 
 
$reponse = $bdd->query('
SELECT 
Forum.ID ID, Forum.NomForum Nom, Sujet.ID_Liaison_Forum, count(*) Tot
FROM 
Forum
LEFT JOIN
Sujet
ON
Forum.ID = Sujet.ID_Liaison_Forum
GROUP BY
ID
 
 
');
 
while ($donnee = $reponse->fetch())
 
{
echo '<tr>
    <td>';   
	echo '<strong><a href="VoirForum.php?Forum='. $donnee['ID'] .'">' . $donnee['Nom'] . '</a></strong> <br/></td>';
//echo $donnee['Description'] . '<br/><br/>'; 
 
echo '<td>' . $donnee['Tot'] . '</td>';
}
$reponse->closeCursor();
 
echo '</tr>';
 
 
echo'</table>';

Ceci semble marcher, sauf quand le Forum est vide car Tot me retourne 1 mais cela est un détail.

Y a-t-il une limite au nombre de jointures permises ?
Phrederik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 12h53   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 644
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 644
Points : 2 641
Points : 2 641
Votre requête devrait être écrite de cette manière :

Code :
1
2
3
SELECT Forum.ID ID, Forum.NomForum Nom, tmp.Tot
FROM Forum
LEFT JOIN (select ID_Liaison_Forum, count(*) as tot from Sujet group by ID_Liaison_Forum) as tmp ON Forum.ID = tmp.ID_Liaison_Forum

Dans la requête que vous avez postée vous utilisez une écriture spécifique MySql totalement foireuse qui risque de ne plus marcher sur une version +1 de ce SGBD.

=> lors d'une agrégation (GROUP BY) toutes les colonnes de la clause SELECT doivent être présentes dans la clause GROUP BY, sinon il faut utiliser une fonction d'agrégation sur les colonnes (min / max / sum / etc..)



Pour votre seconde question, limite s'il y a, sera bien au dessus de ce que vous pourrez avoir.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 22h26   #7
Membre à l'essai
 
Inscription : février 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 57
Points : 22
Points : 22
ça marche nickel merci.
Phrederik 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 12h38.


 
 
 
 
Partenaires

Hébergement Web