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 :

Affichage sous plusieurs conditions


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut Affichage sous plusieurs conditions
    Bonjour,

    Je travaille sur un site web dédié aux séries télévisées.

    Le site affiche des fiches descriptives des différentes séries.

    L'affichage de la distribution se fait comme suit:

    Affichage normal:
    ACTEUR : ROLE

    Si un acteur est remplacé par un ou plusieurs autres dans son rôle:
    ACTEUR remplacé par ACTEUR remplacé par ... : ROLE

    Exemple

    Pour cet affichage, Séb. m'a déjà aidé ici;

    Par contre, dans le cas ci-dessous, je ne parviens vraiment à rien.

    Dans certain cas, la distribution est affichée par périodes :

    Affichage normal:
    PERIODE
    ACTEUR : ROLE

    Si un acteur est remplacé par un ou plusieurs autres dans son rôle:
    PERIODE
    ACTEUR remplacé par ACTEUR remplacé par ... : ROLE

    Exemple

    J'utilise une base de données pour afficher mes fiches.

    Voici ma requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $castQuery = $conn->prepare('SELECT seriesTitle, characterName AS charName, personName, appearanceOrder AS appOrder, period FROM CASTING AS C
                    JOIN SERIES AS S ON S.seriesId = C.seriesId
                    JOIN PERSON AS P ON P.personId = C.personId
                    JOIN CHAR_PLAYED AS CP ON CP.characterId = C.characterId
                    WHERE S.seriesId = '.$_GET['series'].'
                    ORDER BY appearanceOrder');
    $castQuery->execute();
    $castResult = $castQuery->get_result();

    Si une âme charitable pouvait m'aider...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut
    Bien, j'ai fini par trouver une solution à mon problème:

    Mon code PHP:
    Code php : 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
     
    <?php
    	$row = $castResult->fetch_assoc();
    		if ($row['period'] == '') {
    			while ($row = $castResult->fetch_assoc()) {
    		            // Grouping actors by character
    			    $cast[$row['charName']][] = $row['personName'];
    			}
    			foreach ($cast as $char => $persons) {
    			    echo '<p class="castAndCrew">', implode(' > ', $persons), " : {$char}</p>";
    			}				
    		}
    		else {
    			if (($row['period']) == "0") {
    				echo '<p class="castAndCrew">'.$row['personName'].' : '.$row['charName'].'</p>';
    			}
    			while($row = $castResult->fetch_assoc()) {
    			    // Grouping actors by period, then character
    			    $cast[$row['period']][$row['charName']][] = $row['personName'];
    			}
    			foreach($cast as $period=>$chars) {
    				echo '<span class="castAndCrew">'.$period . '</span>';
    				foreach($chars as $char=>$persons)
    				{
    					echo '<p class="castAndCrew">', implode(' > ', $persons), " : {$char}</p>";
    				}
    			}
    		}
    ?>

    Ma requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $castQuery = $conn->prepare('SELECT S.seriesId, CP.characterId AS charId, P.personId, seriesTitle, characterName AS charName, personName, appearanceOrder AS appOrder, period FROM CASTING AS C
    JOIN SERIES AS S ON S.seriesId = C.seriesId
    JOIN PERSON AS P ON P.personId = C.personId
    JOIN CHAR_PLAYED AS CP ON CP.characterId = C.characterId 
    WHERE S.seriesId = '.$_GET['series'].'
    ORDER BY period, appOrder');
    $castQuery->execute();
    $castResult = $castQuery->get_result();

    Mais il me reste un problème, et ce, avec une seule série. Je me retrouve avec un écart entre "DISTRIBUTION" et la liste du casting.
    Nom : Capture d’écran_2023-06-20_09-41-10.png
Affichages : 87
Taille : 315,1 Ko

    Alors que pour les autres série, tout va bien:
    Nom : Capture d’écran_2023-06-20_09-41-56.png
Affichages : 87
Taille : 225,9 Ko Nom : Capture d’écran_2023-06-20_09-42-29.png
Affichages : 91
Taille : 99,5 Ko

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut
    Je pense avoir cerné le problème.

    Je pense que c'est cette portion du code, qui provoque l'affichage d'un span supplémentaire:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach($cast as $period=>$chars) {
    	echo '<span class="castAndCrew">'.$period. '</span>';
    	foreach($chars as $char=>$persons)
    	{
    		echo '<p class="castAndCrew">', implode(' > ', $persons), " : {$char}</p>";
    	}
    }

    En effet, le but est d'afficher l'intitulé de la période, puis le casting qui la compose.
    Et le foreach qui sert à afficher l'intituler des périodes, allez savoir pourquoi, ajoute un span au-dessus de l'intitulé de la première période.

    Quelqu'un aurait-il une idée pour remédier à ça ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut Boucle avec requête SQL- Première ligne de résultats manquante
    Bonjour,

    Afin d'afficher tous les résultats d'une requête SQL, j'utilise le code suivant :
    Code php : 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
     
    $row = $castResult->fetch_assoc();
    if ($row['period'] == '') {
    	while ($row = $castResult->fetch_assoc()) {
    	    // Grouping actors by character
    	    $cast[$row['charName']][] = $row['personName'];
    	}
    	foreach ($cast as $char => $persons) {
    	    echo '<p class="castAndCrew">', implode(' -> ', $persons), " : {$char}</p>";
    	}				
    }
    else {
     
    	if ($row['period'] == '0') {
    		echo '<p class="castAndCrew">'.$row['personName'].' : '.$row['charName'].'</p>';
    	}
    	while($row = $castResult->fetch_assoc()) {
      	    // Grouping actors by period, then character
    	    $cast[$row['period']][$row['charName']][] = $row['personName'];
    	}
    	foreach($cast as $period=>$chars) {
    		echo '<span class="castAndCrew">'.$period.'</span>';
    		foreach($chars as $char=>$persons) {
    	   	    echo '<p class="castAndCrew">', implode(' -> ', $persons), " : {$char}</p>";
    		}
    	}
    }

    Or, il me manque une ligne de résultat.
    Je pense que c'est à cause de la ligne "$row = $castResult->fetch_assoc();"

    Problème, si je la supprime, je ne peux plus définir ma condition...

    Je pense également que c'est en rapport avec mon problème du sujet précédent.

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Je pense que c'est à cause de la ligne "$row = $castResult->fetch_assoc();"
    Exactement.

    Avec PDO tu peux faire $result->rowCount() pour connaître le nombre de lignes du résultat, ça évite de manger une ligne pour rien.
    Regarde si tu as l'équivalent avec la classe que tu utilises.

    Tu peux aussi mettre préalablement toutes tes lignes de ton résultat dans un tableau ($pdo->query($sql)->fetchAll() avec PDO) et agir selon le nombre d'éléments du tableau, voir count().

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut
    Je te remercie pour ton aide. J'ai trouvé l'équivalent, m'ai je ne vois pas trop à
    quoi ça doit me servir de plus.

    Je patauge, là. Je suis débutant.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut
    Bien, je suis maintenant passé à PDO, mais je n'arrive à rien de plus pour autant.

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Donne ton dernier script à date.

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

Discussions similaires

  1. sommer sous plusieurs conditions
    Par matlabation dans le forum R
    Réponses: 10
    Dernier message: 13/05/2015, 14h40
  2. [XL-2010] Calcul d'écart type sous plusieurs conditions
    Par Pocken dans le forum Excel
    Réponses: 6
    Dernier message: 28/03/2014, 15h02
  3. VBA Excel 2003 Copier ligne sous plusieurs conditions
    Par Harreauv dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/01/2013, 18h40
  4. [XL-2003] Compter nombre de cellules sous plusieurs conditions
    Par coklin dans le forum Excel
    Réponses: 10
    Dernier message: 11/09/2009, 14h48
  5. Somme sous plusieurs conditions
    Par neeux dans le forum Excel
    Réponses: 5
    Dernier message: 04/07/2007, 14h53

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