L'exploitation de donnée

Eléphant du PHP | 174 Messages

25 juil. 2005, 22:31

Si c'est le nombre de page qui vous déranges dite le nous on va crée un autre post :lol:.

Mammouth du PHP | 19672 Messages

25 juil. 2005, 22:40

lol, non, celui-ci est ouvert, terminez-le ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 174 Messages

25 juil. 2005, 22:45

n'afficher qu'un seul résultat même si tu as plusieurs lignes de résultats, tu peux procéder de la manière suivante: enregistre le retour de la base de données dans un tableau indexé et affiche seulement l'index 0 de ton tableau. Même si la base de renvoie 100 lignes, tu n'en afficheras qu'une seule.
moi j'aimerais savoir si on peut adapté ton système à celà (désolé je repete souvent le script dans ce post)
$sql = 'SELECT C.id_concours AS id_concours, C.nom AS nom, C.mois AS mois,
C. dmois AS dmois, B.bande AS bande, M.mode AS mode, C.report AS report, C.lien AS lien, C.info AS info
FROM concours C
INNER JOIN concours_bande CB
ON C.id_concours = CB.id_concours
INNER JOIN bandes B
ON CB.id_bande = B.id_bande
INNER JOIN concours_mode CM
ON C.id_concours = CM.id_concours
INNER JOIN modes M
ON CM.id_mode = M.id_mode
ORDER BY C.id_concours';

// exécution de la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// tableaux qui va stocker les informations d'un concours
$concours_courant = Array();

// tant qu'il y a des lignes de résultat, on les met dan sle tableau $data
while ($data = mysql_fetch_array($req)) {
    // si l'identifiant du concours de la ligne courant est différent de celui stocké : on a changé de concours
    if ($concours_courant['id_concours'] <>  $data['id_concours']) {
        // on affiche toutes les infos du concours précédent
        echo ' <i>Nom : '.$concours_courant['nom'].'</i><br>';
        echo ' <i>Mois : '.$concours_courant['mois'].'</i><br>';
        echo ' <i>Détails : '.$concours_courant['dmois'].'</i><br>';
        
        echo ' <i>Bande : '.$concours_courant['bandes'].'</i><br>';
        echo ' <i>Mode : '.$concours_courant['modes'].'</i><br>';
        
        echo ' <i>Report : '.$concours_courant['report'].'</i><br>';
        echo ' <i>lien : <a href="'.$concours_courant['lien'].'">'.$concours_courant['lien'].'</a></i><br>';
        echo ' <i>info : '.$concours_courant['info'].'</i><br>';
        
        // on supprime ces infos pour stocker les nouvelles
        $concours_courant = Array();
        
        // on socke l'identifiant du concours comme l'identifiant courant
        $concours_courant['id_concours'] = $data['id_concours'];
        
        // on stocke les autres infos du nouveau concours
        $concours_courant['nom'] = $data['nom'];
        $concours_courant['mois'] = $data['mois'];
        $concours_courant['dmois'] = $data['dmois'];
        $concours_courant['report'] = $data['report'];
        $concours_courant['lien'] = $data['lien'];
        $concours_courant['info'] = $data['info'];
    }
    // ici on va concaténer chaque mode et chaque bande, pour les stocker ensemble, séparés par une virgule
    $concours_courant['modes'] .= ', '.$data['mode'];
    $concours_courant['bandes'] .= ', '.$data['bande'];

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 juil. 2005, 22:47

non car ici tu as au moins une infos utiles dans chaque ligne de résultat, vu que ce sont des jointures

essaye celui-ci, on stocke les bandes/modes dans un sous-tableau, ce qui permet de tester pour ne pas avoir de doublons
<?php// les AS servent à donner des noms plus facilement utilisables avec mysql_fetch_array
$sql = 'SELECT C.id_concours AS id_concours, C.nom AS nom, C.mois AS mois,
C. dmois AS dmois, B.bande AS bande, M.mode AS mode, C.report AS report, C.lien AS lien, C.info AS info
FROM concours C
INNER JOIN concours_bande CB
ON C.id_concours = CB.id_concours
INNER JOIN bandes B
ON CB.id_bande = B.id_bande
INNER JOIN concours_mode CM
ON C.id_concours = CM.id_concours
INNER JOIN modes M
ON CM.id_mode = M.id_mode
ORDER BY C.id_concours';

// exécution de la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// tableaux qui va stocker les informations d'un concours
$concours_courant = Array();

// tant qu'il y a des lignes de résultat, on les met dan sle tableau $data
while ($data = mysql_fetch_array($req)) {
    // si l'identifiant du concours de la ligne courant est différent de celui stocké : on a changé de concours
    if ($concours_courant['id_concours'] <>  $data['id_concours']) {
        // si $concours_courant est vide, c'est que c'est le premier passage dans la boucle donc on n'affiche rien
         if (count($concours_courant) > 0) {
            // on affiche toutes les infos du concours précédent
            echo ' <i>Nom : '.$concours_courant['nom'].'</i><br>';
            echo ' <i>Mois : '.$concours_courant['mois'].'</i><br>';
            echo ' <i>Détails : '.$concours_courant['dmois'].'</i><br>';

            echo ' <i>Bandes : ';
            // on affiche le contenu du tableau
            foreach($concours_courant['bandes'] as $bande) {
            	echo $bande.', ';
            }
            echo '</i><br>';
            
            echo ' <i>Modes : ';
            // on affiche le contenu du tableau
            foreach ($concours_courant['modes'] as $mode) {
            	echo $mode.', ';
            }
            echo ' mètres</i><br>';

            echo ' <i>Report : '.$concours_courant['report'].'</i><br>';
            echo ' <i>lien : <a href="'.$concours_courant['lien'].'">'.$concours_courant['lien'].'</a></i><br>';
            echo ' <i>info : '.$concours_courant['info'].'</i><br>';

            // on supprime ces infos pour stocker les nouvelles
            $concours_courant = Array();
        }
        
        // on stocke l'identifiant du concours de la ligne de résultat comme l'identifiant courant
        $concours_courant['id_concours'] = $data['id_concours'];
        
        // on stocke les autres infos du nouveau concours
        $concours_courant['nom'] = $data['nom'];
        $concours_courant['mois'] = $data['mois'];
        $concours_courant['dmois'] = $data['dmois'];
        $concours_courant['report'] = $data['report'];
        $concours_courant['lien'] = $data['lien'];
        $concours_courant['info'] = $data['info'];
    }
    // ici on va stocker les bandes/modes dans un tableau à deux-dimensions
    // si la bande/mode est déjà dans le tableau correspondant, on ne le stocke pas
    if (!in_array($date['mode'],$concours_courant['modes'])) {	
    	$concours_courant['modes'][] = $data['mode'];
    }
    if (!in_array($date['bande'],$concours_courant['bandes'])) {	
    	$concours_courant['bandes'][] = $data['bande'];
    }
}
?>

Eléphant du PHP | 174 Messages

25 juil. 2005, 22:57

Warning: in_array(): Wrong datatype for second argument in c:\program files\easyphp1-8\www\bconcours\list7.php on line 80

Warning: in_array(): Wrong datatype for second argument in c:\program files\easyphp1-8\www\bconcours\list7.php on line 83
line 80  if (!in_array($date['mode'],$concours_courant['modes'])) {    
        $concours_courant['modes'][] = $data['mode'];
    }
line 83  if (!in_array($date['bande'],$concours_courant['bandes'])) {    
        $concours_courant['bandes'][] = $data['bande'];
    }
les $date = data sa doit etre celà
Modifié en dernier par elminio le 25 juil. 2005, 22:59, modifié 1 fois.

Mammouth du PHP | 19672 Messages

25 juil. 2005, 22:58

Peut-être bien: fais un tableau à 3 dimensions:
<?php
$sql = 'SELECT C.id_concours AS id_concours, C.nom AS nom, C.mois AS mois,
C. dmois AS dmois, B.bande AS bande, M.mode AS mode, C.report AS report, C.lien AS lien, C.info AS info
FROM concours C
INNER JOIN concours_bande CB
ON C.id_concours = CB.id_concours
INNER JOIN bandes B
ON CB.id_bande = B.id_bande
INNER JOIN concours_mode CM
ON C.id_concours = CM.id_concours
INNER JOIN modes M
ON CM.id_mode = M.id_mode
ORDER BY C.id_concours';

// exécution de la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// tableaux qui va stocker les informations d'un concours
$concours_courant = Array();
$i = 0;
// tant qu'il y a des lignes de résultat, on les met dan sle tableau $data
while ($data = mysql_fetch_array($req))
{
    $concours_courant[$i] = array();
    // si l'identifiant du concours de la ligne courant est différent de celui stocké : on a changé de concours
    if ($concours_courant[$i]['id_concours'] <>  $data['id_concours'])
    {
        // on affiche toutes les infos du concours précédent

        echo ' <i>Nom : '.$concours_courant['nom'].'</i><br>';
        echo ' <i>Mois : '.$concours_courant['mois'].'</i><br>';
        echo ' <i>Détails : '.$concours_courant['dmois'].'</i><br>';

        echo ' <i>Bande : '.$concours_courant['bandes'].'</i><br>';
        echo ' <i>Mode : '.$concours_courant['modes'].'</i><br>';

        echo ' <i>Report : '.$concours_courant['report'].'</i><br>';
        echo ' <i>lien : <a href="'.$concours_courant['lien'].'">'.$concours_courant['lien'].'</a></i><br>';
        echo ' <i>info : '.$concours_courant['info'].'</i><br>';

        // on supprime ces infos pour stocker les nouvelles
        $i++;
    }

    // on stocke l'identifiant du concours comme l'identifiant courant
    $concours_courant[$i]['id_concours'] = $data['id_concours'];

    // on stocke les autres infos du nouveau concours
    $concours_courant[$i]['nom'] = $data['nom'];
    $concours_courant[$i]['mois'] = $data['mois'];
    $concours_courant[$i]['dmois'] = $data['dmois'];
    $concours_courant[$i]['report'] = $data['report'];
    $concours_courant[$i]['lien'] = $data['lien'];
    $concours_courant[$i]['info'] = $data['info'];

    // ici on va concaténer chaque mode et chaque bande, pour les stocker ensemble, séparés par une virgule
    $concours_courant['modes'] .= ', '.$data['mode'];
    $concours_courant['bandes'] .= ', '.$data['bande'];
    $i++;
}
?> 
Il me manque les éléments pour les deux dernières lignes du la boucle, mais dans le pincipe, ça te ferais la première dimension pour l'id du concours, comme ça, tu as les résultat d'un même concours dans un index (0, 1, 2 etc..) et dans chacun des tableaux pour les différents résultats.

Après ça, un array_sort te permettrait de faire afficher ce que tu désires.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 juil. 2005, 23:05

les erreurs proviennent du fait qu'au début les sous-tableaux ne sont pas initialisés

Eléphant du PHP | 174 Messages

25 juil. 2005, 23:14

Il me manque les éléments pour les deux dernières lignes du la boucle,
???

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 juil. 2005, 23:21

bon Cyrano débarque alors même s'il a des idées le temps qu'elles soient complètement en adéquation j'ai peur que tu t'embrouilles à bosser sur deux scripts à la fois... :)

je te met du code ici : www.ouckileou.net/phpfrance/elminio.php

Eléphant du PHP | 174 Messages

25 juil. 2005, 23:44

YES voici le résultat :
Nom : Championnat de france HF Phonie
Mois : Février
Détails : dernier week-end
Bandes : 160m, 80m, 40m, 20m, 15m, 10m,
Modes : phonie, mètres
Report : RST + N° ex: (59001)
lien : http://www.ref-union.org
info : Aucune
Nom : Championnat de france HF Télégraphie
Mois : Janvier
Détails : Dernier week-end
Bandes : 160m, 80m, 40m, 20m, 15m, 10m,
Modes : télégraphie, mètres
Report : RST + N° ex: (599001)
lien : http://www.ref-union.org
info : Aucune
Nom : Concours IOTA
Mois : Juillet
Détails : dernier week-end
Bandes : 80m, 40m, 20m, 15m, 10m,
Modes : phonie, télégraphie, mètres
Report : RST + N° ex: (59001)
lien : http://www.rsgb.org
info : Aucune
Nom : Championnat du monde HF IARU
Mois : Juillet
Détails : second week-end
Bandes : 160m,
Modes : mode digitaux, mètres
Report : RST + N° ex: (59001)
lien : http://www.iaru.org
info : Aucune
Modifié en dernier par elminio le 26 juil. 2005, 00:15, modifié 1 fois.

ViPHP
pjl
ViPHP | 2119 Messages

25 juil. 2005, 23:49

Et puis, pour la requête, c'est moi qui l'ai fait avec elminio et elle est bonne. :pouce:
Non,mais............... :axe:

Mammouth du PHP | 19672 Messages

25 juil. 2005, 23:49

Je n'ose y croire.... on approcherait de la résolution ? :langue:

Je suis déjà parti :arrow:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 174 Messages

26 juil. 2005, 00:07

Ben tout ce que je peux dire c'est un très grand merci à ouckileou car franchement il m'a aidé pour tous mes posts.
Et pjl merci aussi car sans toi et tes posts :wink: je n'aurais pas continué
cette requete avec ces jointures. :merci:

et derniere chose peux t'on enlever la derniere virgule de bande et de mode

exemple :

bande : 160m, 80m, 40m, no
160m, 80m, 40m yes

j'ai l'impression que sa doit etre une galere :roll:

avce un script de ce genre si rien après $mode affiche rien :lol:
facile à dire plus dur à réaliser

ViPHP
fab
ViPHP | 2657 Messages

26 juil. 2005, 01:50

$mode = '180m,';
$mode = substr($mode,0,-1); // c'est la que ça se passe
echo $mode; // ça affiche 180m
:p

Eléphant du PHP | 174 Messages

26 juil. 2005, 09:54

$mode = '180m,';
$mode = substr($mode,0,-1); // c'est la que ça se passe
echo $mode; // ça affiche 180m
ok salut fab le script fonctionne par contre je l'ai intégré au script php precedent :
et voici un exemple du résultat

pour bande et mode résultat attendu :
Bande : 80m, 40m, 20m
Mode : phonie, télégraphie

résultat obtenu avec le script:
Bande : 80, 40, 20,
Mode : phoni, télégraphi,