Php - positionner pointeur en début de table

services12move Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
services12move Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai 1 table contenant les champs "ID_Metier, Nom, Sousfiche, Appartenance" que je veux trier pour afficher :
* les metiers par ordre alphabétique
* regroupés par fonction

Objectif : lister un ensemble de métiers, en décalant les "fonctions" liées. L'ensemble (métiers et fonctions) sont dans la même table. Pour distinguer l'un de l'autre, un champ "Appartenance" contient soit le no de son propre identifiant "ID_Metier", soit le no du métier auquel il "appartient".


Voici mon code :
<?php
// Sélection des noms de métiers considérés comme fiches, et tri par ordre alphabétique
$SQLQuery = "Select ID_Metier, Nom, Sousfiche, Appartenance from metiers WHERE Sousfiche=0 ORDER BY Nom";
$tablefiche = mysql_query($SQLQuery);

// Sélection des noms de métiers considérés comme sous-fiches, et tri par ordre d'appartenance
$SQLQueryBis = "Select Nom, Sousfiche, Appartenance from metiers WHERE Sousfiche=1 ORDER BY Appartenance";
$tablesousfiche = mysql_query($SQLQueryBis);

// 1ere boucle qui va faire le tour pour chaque enregistrement considéré comme fiche complete
while($fiche = mysql_fetch_assoc($tablefiche))
{
echo "fiche : ".$fiche['Appartenance']."=>".$fiche['Nom']."<br>";
// 2eme boucle qui va faire le tour des sous-fiches pour voir si l'une d'entre elles s'apparente a la fiche complete en cours
while($sousfiche = mysql_fetch_assoc($tablesousfiche))
{
if ($sousfiche['Appartenance'] == $fiche['ID_Metier'])
{
echo " - sous-fiche : ".$sousfiche['Appartenance']."=>".$sousfiche['Nom']."<br>";
$sousfiche = mysql_fetch_assoc($tablesousfiche);
}
}
$fiche = mysql_fetch_assoc($tablefiche);
}
?>


==> Mon problème se situe dans la 2eme boucle. Au premier passage, tout se passe bien. Mais dès le 2eme passage, le pointeur se trouve en bout de table, et rien n'est vérifié. J'ai bien tenté de repositionner le pointeur avec reset($tablesousfiche).. mais j'obtiens une erreur :
Warning: reset() [function.reset]: Passed variable is not an array or object

Si l'un d'entre-vous a une idée... elle est la bienvenue !! A vous lire,

Mike
A voir également:

4 réponses

caccia Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   16
 
Salut!

Pourquoi ne pas faire une seule requête SQL et effectuer un affichage selectif selon que sousfiche soit à 0 ou à 1? Tu fais une requête avec l'appartenance comme condition...
0
le père
 
Bonjour

Ce n'est pas reset pour repointer au début des enregistrements, c'est mysql_data_seek ( resource result , int row_number )
https://www.php.net/manual/fr/function.mysql-data-seek.php
0
caccia Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   16
 
Ah effectivement je ne l'avais pas relevée celle-là... Au temps pour moi.
0
services12move Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   20
 
super... ça fonctionne parfaitement, merci du coup de pouce.

Pour les futurs lecteurs, le code devient donc :
<?php
// Sélection des noms de métiers considérés comme fiches, et tri par ordre alphabétique
$SQLQuery = "Select ID_Metier, Nom, Sousfiche, Appartenance from metiers WHERE Sousfiche=0 ORDER BY Nom";
$tablefiche = mysql_query($SQLQuery);

// Sélection des noms de métiers considérés comme sous-fiches, et tri par ordre d'appartenance
$SQLQueryBis = "Select Nom, Sousfiche, Appartenance from metiers WHERE Sousfiche=1 ORDER BY Appartenance";
$tablesousfiche = mysql_query($SQLQueryBis);

//on fait une 1ere boucle qui va faire le tour pour chaque enregistrement considéré comme fiche complete
while($fiche = mysql_fetch_assoc($tablefiche))
{
echo "".$fiche['Nom']."<br>";
// on fait une 2eme boucle qui va faire le tour des sous-fiches pour voir l'une d'entre elles s'apparente a la fiche complete en cours

while($sousfiche = mysql_fetch_assoc($tablesousfiche))
{
if ($sousfiche['Appartenance'] == $fiche['ID_Metier'])
{
echo " - ".$sousfiche['Nom']."<br>";
$sousfiche = mysql_fetch_assoc($tablesousfiche);
}
}
//sortie de la 2eme boucle => repositionnement du pointeur sur le 1er enregistrement de $tablesousfiche
mysql_data_seek($tablesousfiche, 0);

$fiche = mysql_fetch_assoc($tablefiche);
}
?>
0