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

Langage PHP Discussion :

select count avec 3 tables


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Points : 70
    Points
    70
    Par défaut select count avec 3 tables
    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 évènements 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 évènement.

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

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

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

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

    mon code ci-dessous :

    - code php avant header
    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
    $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
    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
    <?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

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Pour connaitre le nombre de lignes d'un résultat, ce n'est pas "mysql_affected_rows()", mais "mysql_num_rows()".

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 58
    Points
    58
    Par défaut
    Attention, il faut faire mysql_num_rows($rez_count) ou mysql_num_rows($rez) sinon la fonction ne sait pas sur quelle ressource faire le calcul

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Points : 70
    Points
    70
    Par défaut
    Alors j'ai eu la réponse sur un autre forum... je la poste ici au cas où ça pourrait aider quelqu'un (quoi que vu la requête spéciale j'ai un doute ^^)

    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(i.eid) 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(i.eid) 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
    Voila le code ci-dessus est bon, il y avait 2 modifs à faire ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/08/2012, 22h44
  2. Select count avec case statment sur un table vide
    Par shessuky dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/04/2012, 13h58
  3. [Requête SQL] - Select count avec plusieurs tables
    Par Pithonnette dans le forum SQL
    Réponses: 7
    Dernier message: 25/06/2009, 19h19
  4. [PL/SQL] SELECT INTO avec type TABLE
    Par Kaejar dans le forum Oracle
    Réponses: 13
    Dernier message: 06/07/2006, 16h17
  5. count avec 2 tables
    Par PerfectSlayer dans le forum Requêtes
    Réponses: 7
    Dernier message: 23/06/2006, 22h00

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