Forum Programmation.php while boucle + 1

Posté par  (site web personnel) .
Étiquettes : aucune
0
14
juin
2007
Bonjour,
j'ai un bout de code qui me sort le contenus d'une table mysql selon un critère de recherche.
Voici mon bout de code:

while($data = mysql_fetch_assoc($requete))
{
echo 'nom:'.$data['nom'].'
position:'.$data['position'].'
id;'.$data['id'].' ';
}

il me faudrait le position et l'id qui suivent (dans le prochain passage de l'id). Et la je nage, est 'il possible de demander se résultat à mysql ?
Ou faut t'il que je copie tout dans un tableau et que je fasse le traitement après coup ?

Je vous remercie d'avance
  • # .

    Posté par  . Évalué à 2.

    Première solution:

    $current = mysql_fetch_assoc($requete);
    if ($current) {
        while($next = mysql_fetch_assoc($requete))
        {
            echo 'nom:'.$current['nom'].'
                    position:'.$current['position'].'
                    id;'.$current['id'].' ';
            echo 'prochain:'$next['nom'].' '.$next['position']."\n";
            $current = &$next;
        }
    }


    Deuxième solution: utiliser mysql_data_seek
  • # modifie ta requete

    Posté par  . Évalué à 2.

    le fonctionnement de

    mysql_fetch_assoc($requete) est de te renvoyer le resultat de $requete sous forme de tableau associatif.
    1 ligne = 1 tableau

    si tu as 5 lignes de resultat à ta requete, tu auras 5 fois
    echo 'nom:'.$data['nom'].'position:'.$data['position'].'id;'.$data['id'].' ';


    si tu veux les infos de la ligne suivante, il te faut alors faire une requete qui fait d'office le +1

    ou bien ,si c'est pour trouver le dernier, et creer le suivant simplement
    faire une requete avec LAST (ca te trouve le dernier)

    comment je le coderais ?


    $requete="select last 1 * from table order by id ASC;"; // Selectionne LA derniere ligne de la table (rangée par ordre croissant d'id)
    $resultat = mysql_query($requete); // Forcement un seul resultat le dernier
    $data = mysql_fetch_assoc($resultat); // Je range mon resultat dans un tableau associatif

    $nextposition=$data['position']+1; // Je calcule la nouvelle position
    $nextid=$data['id']+1; // Je calcule le nouvel id

  • # Auto-increment

    Posté par  (site web personnel) . Évalué à 2.

    Si c'est pour connaître l'id pour la prochaine ligne a insérer te fait pas chier.

    Exemple ta table :

    id nom fonction
    1 test test
    2 bla bla
    3 taga da
    ...
    4012 car ambar


    Tu met l'attribut auto-increment a ton champ id et le problème est réglé.

    Tu auras just a faire une requête comme ça pour ajouter une ligne a la fin :
    INSERT `nom_table` (`nom`, `fonction`) VALUES ('trou', 'badour');
    • [^] # Re: Auto-increment

      Posté par  (site web personnel) . Évalué à 1.

      Non c'est pas pour inserer des données mais pour connaître le voisin lors d'une recherche selon un critère (dans ce cas la les id ne se suivent pas, elles sont la pour identifier l'entrée uniquement).
      Mais j'ai trouver la solution, un tableau multi-dimensionnel.

      Je poste ma solutions si cela peut aider certain:

      //connexion à la base
      $db = mysql_connect("$serveur","$login","$pass");
      mysql_select_db($base,$db);
      //requète SQL
      $sql = 'SELECT * FROM '.$table.' WHERE rubrique LIKE "'.$rubrique.'" ORDER BY position';
      $req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
      $number = MYSQL_NUM_ROWS($req);

      //boucle pour afficher les résultats
      while($data = mysql_fetch_assoc($req))
      //while($data = mysql_fetch_row($req))
      {
      $tableau[] = $data;

      }
      mysql_close();

      $number =$number-1;
      $i = 0;
      while ($i <= $number) {

      $data = $tableau[$i];
      $o = $i-1;
      $avant = $tableau[$o];
      $a = $i+1;
      $apres = $tableau[$a];
      $i++;
      ...
      }


      En fait j'utilise cela pour pouvoir changer l'ordre dans un menu c'est pour cela que je devait connaître mes voisins (pour pouvoir échanger leurs case position (pour monter au descendre).

      Tout cela tourne dans un plugin de catalogue en ligne pour un CMS fait maison.

      Merci quand même de vos pistes.
      • [^] # Re: Auto-increment

        Posté par  (site web personnel) . Évalué à 2.

        Franchement je comprend pas pourquoi tu as besoin de l'élément suivant ou précédent.

        Mais si j'étais toi, je me prendrais pas le chou...

        Tu t'arrange pour récupérer le bloc de donnée dans un tableau associatif.
        Je connais pas trop les commandes mysql parce que j'utilise mdb2 mais ça dois être possible.

        Ensuite tu te fait une boucle autour du tableau.

        Créer l'objet mdb2 :
        $dsn = array(
        //SQL type database
        'phptype' => 'mysqli',
        //SQL hostname
        'hostspec' => 'localhost',
        //SQL login
        'username' => 'username',
        //SQL password
        'password' => 'password',
        //SQL database name
        'database' => 'database',
        //SQL charset
        'charset' => 'UTF8'
        );
        $options = array(
        'debug' => 2,
        'portability' => MDB2_PORTABILITY_ALL
        );
        $db = MDB2::singleton($dsn, $options);

        Exemple :
        $sql = 'SELECT * FROM '.$table.' WHERE rubrique LIKE \''.$rubrique.'\' ORDER BY position';

        Ensuite tu fait un :
        $res = $db->getAll($sql, null, array(), null, MDB2_FETCHMODE_ASSOC);
        if (MDB2::isError($res))
        trigger_error('sql error: '.$res->getMessage(), E_USER_ERROR);

        Ensuite :
        foreach($res as $key => $value)
        {
        echo $value['id'].' => '.$value['blabla'].'';
        if (isset($res[$key-1]))
        //ton précédent est $res[$key-1]
        ;
        if (isset($res[$key+1]))
        //ton suivant est $res[$key+1]
        ;
        }

        Bon après regarde si tu as pas la même chose en commande mysql direct.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.