Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.php

Programmation.php : while boucle + 1

Posté par Ecran Plat (page perso, ) le 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

> Lire le message (5 commentaires, moyenne: 1,8).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

.

Posté par Vincent ORDY () le 14/06/2007 à 21:04. (lien). É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 NeoX () le 14/06/2007 à 21:08. (lien). É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

--
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux

Auto-increment

Posté par Raphaël Gertz (page perso, ) le 15/06/2007 à 10:19. (lien). É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 Ecran Plat (page perso, ) le 15/06/2007 à 17:16. (lien). É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 Raphaël Gertz (page perso, ) le 17/06/2007 à 09:22. (lien). É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.

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.php