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 -
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
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:
- Php - positionner pointeur en début de table
- Table ascii - Guide
- Table des matières word - Guide
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Easy php - Télécharger - Divers Web & Internet
4 réponses
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...
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...
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
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
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);
}
?>
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);
}
?>