Rechercher : dans
Par :

SQL/PHP Tri d'une table et affichage par grou

Dernière réponse le 3 jui 2008 à 18:27:55 Shadynn, le 31 jui 2001 à 22:13:22 
 Signaler ce message aux modérateurs

Bonsoir à tous
J'ai réussi à trier ma table par ordre alphabétique et afficher les résultat par groupe de lettre mais la première ligne de chaque groupe affiché reste vierge.
Ci-joint mon script, si vous avez plus simple n'hésitez pas.
Merci à tous
------------------------------------------------------------­-------

//----------------S----------------
$requete = mysql_query ("SELECT * FROM mabase WHERE famille='$fami' AND nomFR LIKE 'S%' ORDER BY nomFR");

if ($res = mysql_fetch_object($requete)) { //est-ce qu'un nomFR commençant par S existe ?

echo "<p class='gloss'><a name='S'></a>";
while ($res = mysql_fetch_object($requete)) // tant qu'un nomFR commençant par S exite affichage avec ou sans lien
{
if ($res->valid==YES) $lien="<a href='../Data/$res->page'>$res->nomFR</a>";
else
$lien="<B>".$res->nomFR."</B>";
echo "<BR>$lien &nbsp;($res->nomLatin)\n";
}

//----------------T----------------

etc, etc

-------------------------------------------------------------------

Meilleures réponses pour « SQL/PHP Tri d'une table et affichage par grou » dans :
[Webmaster] Afficher facilement le code php/xhtml de vos pages VoirSi vous voulez proposer a vos visiteurs de voir la source de vos fichiers (PHP ou HTML), il y a plusieurs solutions. En php Afficher le code php Afficher le code html En html Informations Voir aussi En php Afficher le code php La...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
SQL - Modification de table VoirModification de table Il est possible de supprimer une table grâce à la clause DROP, il existe aussi des commandes moins extrêmes permettant L'ajout de colonnes La modification de colonnes La suppression de colonnes Enfin, il est possible...

1

Tittom, le 1 aoû 2001 à 08:41:26

Salut,

Wow, ton script doit être plutôt long, si tu as copié collé cette portion de script pour chaque lettre...

Si j'étais toi, je gèrerais une "rupture" sur la première lettre de la colonne nomFR :

tu définis une variable $old_initiale qui te permettra de détecter si tu changes de lettre ou non :


// requete sans sélection sur la première lettre du nom.
$requete = mysql_query ("SELECT * FROM mabase WHERE famille='$fami' ORDER BY nomFR");


// valeur bidon pour être sûr que la rupture va être
// déclenchée au premier passage...
$old_initiale = -1;

// parcours des lignes résultat
while ($res = mysql_fetch_object($requete))
{

$initiale = substr($res->nomFR, 0, 1);

if ($initiale != $old_initiale)
{
// Changement de lettre
echo "<p class='gloss'><a name='$initiale'></a>";
// Sauvegarde de cette nouvelle lettre pour prochaine rupture
$old_initiale = $initiale;
}

if ($res->valid==YES)
{
$lien="<a href='../Data/$res->page'>$res->nomFR</a>";
}
else
{
$lien="<B>".$res->nomFR."</B>";
}

echo "<BR>$lien &nbsp;($res->nomLatin)\n";
} // Fin du while

// Fin d'affichage des résultats



Cette méthode a l'avantage de t'éviter de copier coller 26 fois ton bout de code : si tu modifies une partie de ce code, cela marchera pour toutes les lettres.


J'espère que cela t'aidera...

Tittom

Répondre à Tittom

2

Bobinours, le 1 aoû 2001 à 17:06:45

La methode de Tittom me parait bonne (quoi qu'un peu bricolo :o)

Ton erreur vient simplement du fait que lorsque tu fais un appel à "$res = mysql_fetch_object($requete)", $res est affectée à la première valeur de $requete (au passage, "$requete" est ambigü, t'aurais du l'appeller "$resultat" car c'est un tableau de résultat) et l'enleves de $requete (c'est l'équivalent de la fonction PHP "array_shift" qui dépile un élément au début d'un tableau).

Quand tu testes "if ($res = mysql_fetch_object($requete))", $requete contient un élément de moins.
C'est pourquoi "while ($res = mysql_fetch_object($requete))" ne tient pas compte de ta première ligne de résultat.

-= Bobinours =-

Répondre à Bobinours

3

Shadynn, le 5 aoû 2001 à 15:32:16

Bonjour et merci pour ton aide,
Je pense avoir bien compris d'où venait le Pb mais pour
un débutant la solution est difficile à trouver.
Comment puis-je afficher cette fameuse ligne ?
------------------------------------------------------------­--------------
$result = mysql_query ("SELECT * FROM rapaces WHERE nomFR LIKE 'A%' ORDER BY nomFR");
echo "<p class='gloss'><a name='A'></a>";
while ($res = mysql_fetch_object($result))
{
//if ($res->valid==YES) $lien="<a href='../Data/$res->page'>$res->nomFR</a>";
//else
$lien="<B>".$res->nomFR."</B>";
echo "<BR>$lien &nbsp;($res->nomLatin)\n";
}
--------------------------------------------------------------------------

Avec le script ci-dessus, si j'ai bien compris, je n'ai pas de Pb de ligne en moins.

Répondre à Shadynn

4

Bobinours, le 7 aoû 2001 à 15:25:06

Je ne maitrisse pas bien la fonction 'mysql_fecth_object' (j'utilise mysql_fetch_row), mais si dans ta base au moins deux champs 'nomFR' et 'page'.
Et que 'page' est égal à une page web (si elle existe) et à vide '' sinon, tu peux remplacer ton test:

if ($res->valid==YES){...

par

if ($res->page != '')( ...


Sinon, ta boucle me parait tout à fait correcte pour récuperer tous les enregistrements de ta base.
Par contre, Tittom a raison sur le fait que si tu dois reproduire 26 fois ton code (pour chaque lettre) c'est du délire.
Tu dois encapsuler au minimum dans une boucle:

$Lettres = array ('A','B','C',...,'Z');
foreach ($Lettres as $initiale)
{
$result = mysql_query ("SELECT * FROM rapaces WHERE nomFR LIKE '". $initaile ."%' ORDER BY nomFR");
...
}

Maintenant, le code de Tittom a l'avantage de ne faire qu'une seule requête 'SELECT', alors que dans ce cas, tu fais 26 requête à la base.

-= Bobinours =-

Répondre à Bobinours

6

 maestro, le 3 jui 2008 à 18:27:55

Bonjour...............ca date ....masi px ton reprendre les code pour moi stp...je ne comprends pas comment on fait laffichage de toutes les lettre et de faire en sorte que cest lettre soit des liens.

Répondre à maestro
Collection CommentÇaMarche.net