IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Changer ordre des lignes avec SQL et PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut Changer ordre des lignes avec SQL et PHP
    bonjour à tous,

    est- il possible d'inverser les enregistrements d'une table. Je m'explique. J'ai une table structure avec plusieurs champs. Je les affiches dans un bloc. Et en fait grace à du drag and drop j'arrive lors de l'affichage de ces blocs à les placer comme je veux. Mais cela ne le fait que sur la page. Comment lorsque je valide ce déplacement cela le fasse aussi dans ma table?


    Merci d'avance.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Les lignes n'ont pas d'ordre dans une table.

    Ajoute une colonne ordre dans ta table et gère la valeur de l'ordre.

  3. #3
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut
    Salut,

    Merci beaucoup. Moi j'ai une colonne avec un id qui s'incrémente automatiquement. Est-ce qu'il y a moyen de le faire avec cet ID?

  4. #4
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Si ton id s'incrémente automatiquement c'est qu'il n'est normalement pas fait pour être modifier.
    Les lignes n'ont pas d'ordre dans une table.

    Ajoute une colonne ordre dans ta table et gère la valeur de l'ordre.
    Ajoute une colonne pour gerer l'ordre de tes champs, mais même lorsque tu fera un select, les lignes seront les unes à la suite des autres, tu aura besoin d'un order by.

  5. #5
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut
    ah d'accord. Merci.

    J'ai donc créé une colonne struct_ordre de type int.
    Je fais un update de la table mais dans mon code c'est après que je suis pas très sur de ce que j'ai fais. Voici ce que j'ai fais comme requète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "UPDATE stream_structure SELECT * FROM stream_structure order by struct_ordre";

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683

  7. #7
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Citation Envoyé par kifouillou Voir le message
    est- il possible d'inverser les enregistrements d'une table.
    Ca n'a pas de sens, les lignes d'une table ne sont pas ordonnées
    C'est à la restitution des données (SELECT) que tu peux spécifier ou non si tu veux trier selon une colonne (order by colonne ASC ou order by colonne DESC)
    Si ton modèle est bien fait tu devrais avoir une colonne "id" de type numérique unique qui contient une valeur unique pour chaque ligne
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  8. #8
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut
    je crois que je suis un peu perdu,

    j'ai encore jamais fais cela, et mon maître de stage n'est pas là. Quelle aubaine.

    je vous donne le code de ma fonction qui permet de lister les diférentes données en bloc. Pour rerésumer donc, cette fonction liste des structures de documents d'un certain type, ces structures sont déplacables via du javascript au dessus ou en dessous des autres.Moi mon soucis c'est pour enregistrer ces déplacements dans la base. Voilà.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    function pimpListerStructureDocument($type)
    {
     
        	$sql = "select * 
        			from stream_structure2
        			where struct_type_stream = '$type' 
        			order by struct_ordre";
     
        	$Q = dbiQuery($sql);
     
     
     
    		while ($R = dbiFetch($Q))
    		{
            $html .= <<<END
            <div class=ddentry onclick="dragdrop">
                Type : <input type="text" name="type" value= "$R[struct_type_stream]"><br />
                Nom : <input type="text" name="nom" value= "$R[struct_nom]"><br />
                Libelle : <input type="text" name="libelle" value= "$R[struct_libelle]"><br />
                Type des données : <input type="text" name="datatype" value="$R[struct_datatype]">
             </div>
    END;
     
    		} 
     
        $html = <<<END
        <style type=text/css>
        div.ddentry { border:1px solid #999; border-left:20px solid #999;margin-bottom:4px; padding:4px; } 
        </style>
        <h1>Gestion des documents de type $type</h1>
        <form name="formulaire" method=post action='$_SERVER[PHP_SELF]'>
        <input type=hidden name=Action value='$_REQUEST[Action]'>
        <input type=hidden name=Etape value='valider'>
        $html
        <input type=submit>
        </form>
        
        
        // drag and drop des donnees
        <script type=text/javascript>
        	<script type="text/javascript" src="/yui/build/yahoo/yahoo.js"></script>
    		<script type="text/javascript" src="/yui/build/event/event.js"></script>
    		<script type="text/javascript" src="/yui/build/dragdrop/dragdrop.js"></script>
    		(function() 
    		{ 
    3	    	var ddentry 
    4	        YAHOO.util.Event.onDOMReady(function() 
    			{ 
    5	        ddentry  = new YAHOO.util.DD("ddentry "); 
    6	            
    8	        }); 
    9	    })(); 
        </script>
    END;
     
        return $html;
    }
    J'espère que vous y voyer clair. Merci de votre aide.

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    De tout ton code, il n'y a que cela qui concerne ce forum (Langage SQL !):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * 
    from stream_structure2
    where struct_type_stream = '$type' 
    order by struct_ordre
    Si tu souhaites inverser l'ordre de tri de tes lignes, il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * 
    from stream_structure2
    where struct_type_stream = '$type' 
    order by struct_ordre ASC
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  10. #10
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Le problème c'est que ton drag&drop est uniquement visuelle. Je ne sais pas trop comment tu peux faire, mais le mieux serait que à la fin, quand tu enregistres tu boucles sur toutes tes lignes, et tu updates ton champ struct_ordre à l'aide de ton indice de boucle.

  11. #11
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut
    merci marylou,

    mais je vois pas trop comment boucler,

    dois-je mettre des id et ensuite récupérer les différents id et m'en servir dans le update? Je vois pas trop à quoi ressemblerait cette boucle en fait. Pour répondre à al1_24, ce n'est pas vraiment un inversement c'est un changement de place. Selon ce que fait l'utilisateur , par exemple il place le 3eme enregistrement avant le 2eme, le 6eme avant le 4eme,... C'est pour cela que je me demandais si il fallait pas mettre un id dans mes inputs.

    Merci en tout cas de votre aide.

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Supposons que ta table contienne un identifiant unique de ligne d'une part et une colonne qui précise la position de la ligne dans le tableau d'autre part.
    Nommons ces colonnes respectivement Id et Pos.
    Si la ligne dont l'Id est n passe de la position x à la position y, la mise à jour de la table se fera de cette manière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    UPDATE  Pos
    SET     Pos = Pos - 1
    WHERE   Pos BETWEEN x AND y
        AND x < y
        AND Id <> n
    ;
    UPDATE  Pos
    SET     Pos = Pos + 1
    WHERE   Pos BETWEEN y AND x
        AND y < x
        AND Id <> n
    ;
    UPDATE  Pos
    SET     Pos = y
    WHERE   Id  = n
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  13. #13
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut
    Bonjour,

    merci al1 pour ta dernière réponse et désolé du retard de la mienne. Bon vu que mon maître de stage a vu que je galérais, il ma demandé un truc plus simple, juste un update simple des champs. Le problème c'est que ma base ne se met pas à jour. Donc voici la fonction qui liste le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    $sql = "select * 
        			from stream_structure_2
        			where struct_type_stream = '$type'";
     
        	$Q = dbiQuery($sql);
     
    		$i = 0;
     
    		while ($R = dbiFetch($Q))
    		{
    		$i++;	
            $html .= <<<END
            <div class=ddentry>
                Type : <input type="text" name="type_$i" value= "$R[struct_type_stream]" ><br />
                Nom : <input type="text" name="nom_$i" value= "$R[struct_nom]"><br />
                Libelle : <input type="text" name="libelle_$i" value= "$R[struct_libelle]" ><br />
                Type des données : <input type="text" name="datatype_$i" value="$R[struct_datatype]" >
             </div>
    END;
     
            $struct_type = $R['struct_type_stream'];
            $struct_nom = $R['struct_nom'];
            $struct_libelle = $R['struct_libelle'];
            $struct_datatype = $R['struct_datatype'];
            $sturct_id = $R['sturct_id'];
    		} 
     
        $html = <<<END
        <style type=text/css>
        div.ddentry { border:1px solid #999; border-left:20px solid #999;margin-bottom:4px; padding:4px; } 
        </style>
        <h1>Gestion des documents de type $type</h1>
        <form name="formulaire_$i" method=post action='$_SERVER[PHP_SELF]'>
        <input type=hidden name="sturct_id_$i" value="$sturct_id">
        <input type=hidden name=Action value='$_REQUEST[Action]'>
        <input type=hidden name=Etape value='valider'>
        $html
        <input type=submit>
        </form>
    et voici le code de la fonction qui valide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    {
    		$i=1;
    		$sturct_id = $_POST['sturct_id_'.$i];
    		$struct_type = $_POST['type_'.$i];
    		$struct_nom = $_POST['nom_'.$i];
    		$struct_libelle = $_POST['libelle_'.$i];
    		$struct_datatype = $_POST['datatype_'.$i];
     
     
    		$sql = "select * from stream_structure_2 where sturct_id='" . $_POST['sturct_id'] . "'";
    		$Q = dbiQuery($sql);
     
    		while ($R = dbiFetch($Q))
    		{
    			$i++;
     
     
     
    			$struct_type = $R[0];
    			$struct_nom = $R[1];
    			$struct_libelle = $R[2];
    			$struct_datatype = $R[3];
     
     
    			$sql = "UPDATE stream_structure_2 
    					set $R(['struct_type_stream'])='" . $struct_type . "', $R(['struct_nom'])='" . $struct_nom . "', $R(['struct_libelle'])='" . $struct_libelle . "', $R(['struct_datatype'])='" . $struct_datatype . "'
    					where sturct_id='" . $_POST['sturct_id'] . "'" ;
     
     
    			$Q = dbiQuery($sql);
    			if (!$Q) 
    				$html .= dbiErreurBD($sql);
    			else
    				$msg .= sprintf("La modification des documents a bien été modifié");
     
     
     
    		}
     
            return $msg; 
     
    }
    Voilà. Si vous pouvez me donner un petit coup de main(je sais pas pourquoi mais je sens que c'est tout bète). Merci encore et toujours pour vos réponses.

Discussions similaires

  1. Problème avec l'ordre d'insertion des lignes avec BULK INSERT
    Par TomtomGesti dans le forum Développement
    Réponses: 3
    Dernier message: 18/07/2014, 16h50
  2. ordre des lignes dans sql server
    Par bobby51 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/06/2008, 15h11
  3. Comment changer les couleurs des lignes avec displaytag
    Par rlnd23 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/10/2006, 13h52
  4. Peut on creer des routines avec SQL
    Par Jamal_71 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/01/2006, 10h37
  5. [Requete] Comment ignorer des lignes avec un LOAD DATA
    Par frangin2003 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2005, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo