Se connecter / S'enregistrer

Résolu Hanger l'emplacement d'un enregistrement dans un tableau

Solutions (18)
Tags :
  • MySQL
  • Select
  • element
  • Programmation
|
Bonsoir,
je voudrais changer l'emplacement d'un enregistrement dans un tableau et ainsi dans le site .. j'ai pensé d'ajouter un attribut position dans la bd et faire order by position mais je sais pas comment faire si l'admin clique sur 'UP' faire monter l'enregistrement coché en premier .. merci de m'aider si vous avez des idees ..
Contenus similaires
Meilleure solution
partage
, Modérateur |
crazycat@idn a dit :
Non, il faut réordonner avec l'élément interverti:
Donc, ça donnerait:
  1. $res = mysql_query("SELECT id, position FROM maTable WHERE id = ".$tonElement);
  2. list($id, $position) = mysql_fetch_assoc($res);
  3. if ($move = 'up') {
  4. $res = mysql_query("UPDATE maTable SET position=(position + 1) WHERE position=".($position-1));
  5. $res = mysql_query("UPDATE maTable SET position=(position - 1) WHERE id=".$id);
  6. } else {
  7. $res = mysql_query("UPDATE maTable SET position=(position - 1) WHERE position=".($position+1));
  8. $res = mysql_query("UPDATE maTable SET position=(position + 1) WHERE id=".$id);
  9. }

Je pars du principe que les positions vont de 0 (le premier) à X (le dernier)

C'est ce que j'ai fait non ? Mis à part que j'ai fait un seul cas :D 
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par folla1987.
  • Commenter cette réponse |
Score
0
òh
òi
|
merci beaucoup beaucoup :love:  omar et crazy .. vous êtes super
  • Commenter cette réponse |
Score
0
òh
òi
|
en fait coome cela <a href='../modeles/administration.php?position=". $d['position']."' > mais je sais pas comment tester sur la position : $pos=$_GET['position'];
  • Commenter cette réponse |
Score
0
òh
òi
|
merci beaucoup et pour mettre en dernier en down ... et aussi j'ai un petit soucis c'est que je veux pas afficher la position mais seulement l'image
  1. echo "<td><input type='submit' class='up' value='" . $d['position'] . "' name='up'/></td>";
  • Commenter cette réponse |
Score
0
òh
òi
|
Tu veux le passer premier de la liste ? Facile :
  1. $res = mysql_query("SELECT id, position FROM maTable WHERE id = ".$tonElement);
  2. list($id, $position) = mysql_fetch_assoc($res);
  3. $res = mysql_query("UPDATE maTable SET position=(position + 1) WHERE position < ".$position);
  4. $res = mysql_query("UPDATE maTable SET position=0 WHERE id=".$id);

Autrement dit, on décale vers le bas tous les éléments qui étaient au dessus de celui que tu déplaces. Ceux qui étaient plus bas ne sont pas modifiés.
  • Commenter cette réponse |
Score
0
òh
òi
|
faire comme ça par exp :
//$n : count(*)
  1. $res = $bdd->query("UPDATE domaines SET position=(position +".$n+1")) WHERE position=".($position-.$n+1));
  2. $res =$bdd->query("UPDATE domaines SET position=(position - .$n+1) WHERE id_domaine=".$id);
  • Commenter cette réponse |
Score
0
òh
òi
|
désoler ..j'ai pas vu le post de crazy ..merci beaucoup mais ça , monte d'un degré .. en fait je veux le rendre en premier dans la liste .. si vous avez une idee ?? merci de me le dire :) 
  • Commenter cette réponse |
Score
0
òh
òi
|
mais ça marche pas comme ça il affecte un seul num à tous les enregistrements !!
  • Commenter cette réponse |
Score
0
òh
òi
|
merci de ta reponse .mais j'ai pas bien compris ta requetes .. pourtant j'ai fait un update et je trouve par contre dans ce cas toutes les positions deviennent =1 ..
et j'ai fait cette requete et je sais si marche !

  1. elseif(isset($_REQUEST['up']))
  2.  
  3. {
  4. if(!empty($_REQUEST["id_domaine"])) { $id=$_REQUEST['id_domaine'];}
  5. $manager = new Domaine();
  6. $pos=$manager->getPosition();
  7. $n=$manager->compteur();
  8. $p=$manager->compteur();
  9. var_dump($pos);
  10.  
  11.  
  12. if($pos==1)
  13. { echo "<div id='erreur'><img src='../images/erreur2.png' width='20' height='20'/> Ce champs est déjà en premier !</div>";}
  14. elseif($pos==$p)
  15. { echo "<div id='erreur'><img src='../images/erreur2.png' width='20' height='20'/> Ce champs est déjà en dernier !</div>";}
  16. else {
  17.  
  18. $manager->modifier_position($id,($p+1)-$n); // $bdd->exec("update domaines set position ='".$position."' WHERE id_domaine =".$id."");
  19. $rep = $bdd->query('SELECT * FROM domaines');
  20. $i=2;
  21. while ( $d = $rep->fetch())
  22. {
  23. for($i;$i<n;$i++)
  24. {
  25. $bdd->query("update domaines set position=".$i."");
  26. }
  27. }
  28. echo("<div id='OK'><img src='../images/Ok.png' width='20' height='20'/>UP.</div><br>") ;
  29. echo $pos;
  30. }
  31.  
  32. }

  • Commenter cette réponse |
Score
0
òh
òi
|
Non, il faut réordonner avec l'élément interverti:
Donc, ça donnerait:
  1. $res = mysql_query("SELECT id, position FROM maTable WHERE id = ".$tonElement);
  2. list($id, $position) = mysql_fetch_assoc($res);
  3. if ($move = 'up') {
  4. $res = mysql_query("UPDATE maTable SET position=(position + 1) WHERE position=".($position-1));
  5. $res = mysql_query("UPDATE maTable SET position=(position - 1) WHERE id=".$id);
  6. } else {
  7. $res = mysql_query("UPDATE maTable SET position=(position - 1) WHERE position=".($position+1));
  8. $res = mysql_query("UPDATE maTable SET position=(position + 1) WHERE id=".$id);
  9. }

Je pars du principe que les positions vont de 0 (le premier) à X (le dernier)
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Quelque chose comme ça :

int positionElement = mysql...blabla(SELECT position FROM maTable WHERE id = tonElement)
UPDATE maTable SET position=positionElement WHERE position = positionElement+1
UPDATE maTable SET position=position+1 WHERE ID = tonElement
  • Commenter cette réponse |
Score
0
òh
òi
|
oui je sais le principe mais augmenter la position de l'enregistrement choisit et changer les positions des autres .. comment faire cet update .?? :??: 
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Il faut que tu donnes des "positions" à chacun de tes éléments.
Et quand tu cliques sur up, tu augmentes la position de ton élément et tu diminues la position de l'élément du dessus. Et l'inverse quand tu cliques sur down
  • Commenter cette réponse |
Score
0
òh
òi
|
je sais pas comment etre plus clair que ça ... je veux afficher dans tableau des donnees recuperees par la bd d'apres une position et eventuellement chnager la postion par up ou down .. ok?
  • Commenter cette réponse |
Score
0
òh
òi
|
Alors pose bien ta question. Je veux bien aider, mais il faut être précis si on veut des réponses précises.
  • Commenter cette réponse |
Score
0
òh
òi
|
c'est pas ce que je veux !! je sais déjà ça
  • Commenter cette réponse |
Score
0
òh
òi
|
En gros, dans une requête SQL, tu veux faire un "order by" en imposant la position des premiers éléments ?
As-tu essayé de faire:
  1. SELECT * FROM table ORDER BY (1, 3, 9, 7, `id`);
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS