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

Requêtes MySQL Discussion :

Inversion de position


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de p0Kep0K
    Homme Profil pro
    Webdesigner
    Inscrit en
    Novembre 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2003
    Messages : 76
    Par défaut Inversion de position
    Bonsoir,

    Je cherche vainement un moyen d'inverser la position des enregistrements d'une table... Concrètement, je suis en train de mettre en place une galerie photos avec, pour chaque image, un enregistrement comportant id, nom et position et, dans mon CMS, j'y intègre un bouton "inverser l'ordre".

    J'aimerais, en une requête UPDATE, pouvoir inverser la position de chaque enregistrement, c'est-à-dire: l'enregistrement en dernière position se retrouve en position 1, l'enregistrement en avant-dernière position se retrouve en position 2, etc.

    Y a-t-il une solution à ça?

    Merci d'avance pour votre aide!

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Oui, utilisez un fichier COBOL à la place d'un SGBDR !

    Les SGBDR comme MySQL c'est HasBeen et ça coute cher..... et puis ça sait pas faire ça !!!

























    Et si vous lisiez un peu avant de poser des questions stupides ?

    http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L6

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Sauf le respect que je dois à Maître SQLpro, son interprétation de la demande de p0Kep0K est un chouïa erronée.
    Il y a, selon moi, méprise entre ordre des lignes (que p0Kep0K appelle enregistrements), et ordre des colonnes, dans le schéma de la table, auquel se réfère le bon maître.
    Ici, un ORDER BY position DESC devrait résoudre le problème.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Membre confirmé Avatar de p0Kep0K
    Homme Profil pro
    Webdesigner
    Inscrit en
    Novembre 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2003
    Messages : 76
    Par défaut
    Merci Maljuna Kris pour ta réponse, je crois que je me suis mal exprimé car aucun des deux n'a compris...

    Un petit schéma devrait faire l'affaire.
    Dans ma table, j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id     nom          position
    ----------------------------
    20     img1.jpg     1
    21     img2.jpg     2
    22     img3.jpg     3
    23     img4.jpg     4
    24     img5.jpg     5
    et à l'aide d'une seule requête UPDATE, j'aimerais obtenir ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id     nom          position
    ----------------------------
    20     img1.jpg     5
    21     img2.jpg     4
    22     img3.jpg     3
    23     img4.jpg     2
    24     img5.jpg     1
    C'est mieux?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Ce serait possible si MySQL gérait les fonctions de fenêtrage comme ROW_NUMBER()... A lire : http://sqlpro.developpez.com/article...use-window/#L0

    mais comme MySQSL est très loin d'implémenter tout le SQL, je vous souhaite bonne chance.
    A lire sur les manques de MySQL : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par p0Kep0K Voir le message
    Dans ma table, j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id     nom          position
    ----------------------------
    20     img1.jpg     1
    21     img2.jpg     2
    22     img3.jpg     3
    23     img4.jpg     4
    24     img5.jpg     5
    et à l'aide d'une seule requête UPDATE, j'aimerais obtenir ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id     nom          position
    ----------------------------
    20     img1.jpg     5
    21     img2.jpg     4
    22     img3.jpg     3
    23     img4.jpg     2
    24     img5.jpg     1
    Quel intérêt de faire ça par UPDATE ?
    C'est une très très mauvaise idée que de modifier des identifiants, a fortiori auto-incrémentés.
    J'en reste à ma version
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id,nom, position
    FROM latable
    ODER BY position DESC
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il ne veut pas modifier les identifiants mais la colonne position.

    Ceci dit, s'il s'agit juste de présenter les données dans l'ordre inverse de la colonne position, ta solution est effectivement la bonne !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Inverser position dans un StringBuffer
    Par ulquiorra dans le forum Langage
    Réponses: 4
    Dernier message: 14/03/2011, 14h03
  2. Position du rendu inversée
    Par LeBabouin dans le forum DirectX
    Réponses: 1
    Dernier message: 20/04/2010, 12h21
  3. Réponses: 5
    Dernier message: 11/08/2008, 15h59
  4. Réponses: 10
    Dernier message: 04/11/2006, 12h03
  5. Réponses: 2
    Dernier message: 02/11/2006, 20h10

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