Select count

Résolu
Riwalenn Messages postés 363 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3742 Statut Membre -
Bonjour,

Voila j'ai un soucis, j'utilise 3 tables que je note ci-dessous :
table indexation (id_index, eid, id_users)
table phpc_events (eid, cid, owner, subject, description, readonly, catid, archive)
table phpc_occurrences(oid, eid, startdate, enddate, starttime, endtime, timetype)

phpc_events corresponds à l'entrée des évenements dans un calendrier avec sujet et description

phpc_occurrences est lié au précédent et montre l'heure de début, l'heure de fin, la date de début et la date de fin d'un évenement.

indexation correspond aux groupes formé entre un évenement et un utilisateur. (eid etant l'id de l'évenement et id_user celui de l'utilisateur)

J'ai donc crée un tableau de ce style
<table>
<tr>
<td>sujet</td><td>supprimer</td><td nbr inscrits</td>


Mon idée était de pouvoir visualiser l'ensemble des évenements entrés dans le calendrier avec le nombre d'inscrits à côté.

Mon problème étant que je n'arrive à visualiser que les évenements où il y a des inscrits... Si pas d'inscrits rien à l'écran :(

mon code ci-dessous :

- code php avant header
$sql="select phpc_events.eid, phpc_events.subject, phpc_events.description, phpc_events.archive, phpc_occurrences.eid, phpc_occurrences.oid, phpc_occurrences.starttime, phpc_occurrences.endtime, phpc_occurrences.startdate, phpc_occurrences.enddate 
FROM phpc_events, phpc_occurrences 
WHERE phpc_events.eid=phpc_occurrences.eid 
ORDER BY phpc_occurrences.startdate";

$rez=mysql_query($sql);
$nb_lignes = mysql_affected_rows();


$sql_count="SELECT count(indexation.eid)as nb_inscrits, phpc_events.eid 
	FROM indexation, phpc_events
	WHERE indexation.eid=phpc_events.eid
	GROUP BY indexation.eid
	ORDER BY indexation.eid desc";

	$rez_count=mysql_query($sql_count);
	$nb_lignes3 = mysql_affected_rows();


- code php de la table
<?php
while(($nn=mysql_fetch_array($rez)) && ($nnc=mysql_fetch_array($rez_count))){
	?>
<tr>
	<?php if ($nn[3] != 1){ ?>
<td><a href="gestion_agenda.php?eid=<?php echo $nn[0]; ?>">&nbsp;- <?php echo $nn[1]."(le&nbsp;".date("d/m/Y", strtotime($nn[8])).")"; ?></a></td>

<td align="center"><a href="files/traitement_agenda.php?eid=-<?php echo $nn[0]; ?>"><img src="img/false.png" border="0" /></a></td>
<td align="center"><?php echo $nnc[0]; ?>
</td>
	<?php } ?>
</tr>
	<?php 
	}
	?>


Si quelqu'un pouvait m'aider ce serait sympa, je tourne en rond depuis ce matin :(

--
Cordialement,
Riwalenn

5 réponses

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Essaie cette requête :
    table indexation (id_index, eid, id_users)
    table phpc_events (eid, cid, owner, subject, description, readonly, catid, archive)
    table phpc_occurrences(oid, eid, startdate, enddate, starttime, endtime, timetype)
    SELECT count(*) as nb_inscrits,  
        e.eid, 
        e.subject, 
        e.description,  
        e.archive,  
        o.starttime,  
        o.endtime, 
        o.startdate,  
        o.enddate  
    FROM phpc_events e 
    INNER JOIN phpc_occurences o ON e.eid = o.eid 
    LEFT OUTER JOIN indexation i ON e.eid = i.eid 
    GROUP BY e.eid 
    ORDER BY o.startdate 
    

    Cette requête remplace tes deux requêtes.
    Le code de ta table s'écrit alors :
    <?php 
    $query = "SELECT count(*) as nb_inscrits,  
        e.eid, 
        e.subject, 
        e.description,  
        e.archive,  
        o.starttime,  
        o.endtime, 
        o.startdate,  
        o.enddate  
    FROM phpc_events e 
    INNER JOIN phpc_occurences o ON e.eid = o.eid 
    LEFT OUTER JOIN indexation i ON e.eid = i.eid 
    GROUP BY e.eid 
    ORDER BY o.startdate"; 
    $rez = mysql_query($query) 
        or die("Erreur dans la requête $query<br />".mysql_error()); 
    
    while($nn = mysql_fetch_array($rez)) 
    { 
        echo "<tr>"; 
        if ($nn["archive"] != 1) 
        { 
            echo "<td><a href=\"gestion_agenda.php?eid=".$nn["eid"]."\"> - ".$nn["subject"]."(le ".date("d/m/Y", strtotime($nn[startdate])).")</a></td>"; 
    
            echo "<td align=\"center\"><a href=\"files/traitement_agenda.php?eid=-".$nn["eid"]."\"><img src=\"img/false.png\" border=\"0\" /></a></td>"; 
            echo "<td align='center'>".$nn["nb_inscrits"]."</td>"; 
        } 
        echo "</tr>"; 
    } 
    ?>

    Je me suis permis de remplacer les nn[x] par des nn["nom"] que je trouve beaucoup plus explicites et pratiques, ainsi que la gestion du code html. c'est une préférence personnelle, mais tu fais comme tu veux :)

    Xavier
    1
  2. Riwalenn Messages postés 363 Date d'inscription   Statut Membre Dernière intervention   101
     
    je test ça et je te dis si ça fonctionne le temps de créer une sauvegarde de mon fichier entre-temps :P
    0
  3. Riwalenn Messages postés 363 Date d'inscription   Statut Membre Dernière intervention   101
     
    alors c'est cool ça fonctionne y'a juste des doubles quote oubliées à ($nn[startdate])...

    par contre si tu pouvais juste m'expliquer comment tu fais pour que le o. ou le e. soient reconnus sans que tu ais fait de AS ? Oo que je puisse le réutiliser pour mes autres requête du coup :P

    merci pour le coup de main super sympa ^^
    0
  4. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Le AS est facultatif :
    FROM phpc_events e
    INNER JOIN phpc_occurences o ...
    LEFT OUTER JOIN indexation i ...

    Nom de la table suivi du nom qu'on veut lui donner (alias)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Riwalenn Messages postés 363 Date d'inscription   Statut Membre Dernière intervention   101
     
    d'accord je te remercie... juste un tit truc c'était pas count(*) qu'il fallait mettre mais count(i.eid)... si * ça mettait 1 inscrit partout ^^
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Oui c'est ce que je venais de me dire :)
      Content que t'aies pu corriger ^^
      0