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 SQL Discussion :

[SQL]Debutant


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Points : 53
    Points
    53
    Par défaut [SQL]Debutant
    Bonjour,

    J'ai une table représentant un groupe d'objet possédant chacun une notion de rang (n°)...
    Si je souhaite insérer un objet au milieu du groupe, il faut alors que je décale tous les rangs des objets placés au dessus de lui.

    Dans ce cas, vaut-il mieux faire:
    1requete de suppression du groupe
    + 1 requete de création du groupe (avec le nouveau groupe modifié)

    Ou:
    1 requete d'insertion dans la table (pour insérer le nlle objet)
    + 1 requete de modification (pour modifier tous les objets dont le rang a changé)

    Quelle est la solution la plus rapide, et celle qui utilise le moins de ressources ?
    Rq: un groupe d'objet contient au maximum 10 à 15 objets.

    Merci.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juin 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 40
    Points : 28
    Points
    28
    Par défaut plus de precision serait bien venu
    Un peu plus de precision sur la table serait la bienvenue... Mais je vais tenter une réponse:

    En fait faire d'abord un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TABLE SET Rang=Rang+1 WHERE Rang>NouveauRang
    Puis Faire l'insert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE(Rang) VALUE(NouveauRang)
    Maintenant qui est clé primaire quelle definition et champs dans ta table, tout cela a un impact sur le bon déroulement de ton process...

  3. #3
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Points : 53
    Points
    53
    Par défaut
    Bon, en fait ma table est faite de la manière suivante (en simplifiée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objet_id ;(PK)
    objet_rang;
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    objet_id objet_rang
    obj1      0
    obj2      1
    obj3      2
    obj4      3
    ...
    Ce que je souhaite faire, c intégrer (par exemple) obj2bis en rang 2.
    Donc la nouvelle table doit etre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    objet_id objet_rang
    obj1      0
    obj2      1
    obj2bis  2
    obj3      3
    obj4      4
    ...
    Donc la meilleure méthode, est elle de tout supprimer pour tout re remplir avec les nouveaux paramètres...

    Ou modifier + insérer (ou insérer + modifier)

    J'espère que j'ai été plus clair...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 40
    Points : 28
    Points
    28
    Par défaut Je confirme
    Confirmation
    Le plus simple c'est l'update d'abord

    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TABLE SET objet_rang=objet_rang+1 WHERE objet_rang>2
    Puis Faire l'insert

    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE(objet_id,objet_rang) VALUE('obj2bis','2')
    Là c'est fait en 2 requetes ta première solution est beaucoup plus compliquée...
    Il faut faire un select

    Puis boucler avec des insert autant de fois que d'objets à déplacer
    Donc du code PHP alors que 2 requètes SQL suffisent dans mon exemple

    Dans mon exemple verifier la syntaxe SQL... j'ai juste ecris le principe rapidement.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Points : 53
    Points
    53
    Par défaut
    ok, je voulais juste savoir le principe!
    les requetes ne sont pas très compliquées !!!
    merci

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 40
    Points : 28
    Points
    28
    Par défaut Pas complt
    Ma réponse n'est pas vraiment exacte.. en fait il faut faire un delete de tous les enregistrement avant de faire un Insert .... donc une requete de plus et si il y a un crach pendant la séquence d'insert tu te retrouve avec une base en vrac....

    C'est carrément plus propre de faire un Update R=R+1 et c'est rapide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL][DEBUTANT] Problème con, aidez moi!
    Par Lambrosx dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2007, 09h44
  2. [MySQL] Jointures externes SQL (débutant)
    Par Invité dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/08/2006, 13h12
  3. [SQL] [debutant] verification du mot de passe
    Par paterson dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 22/03/2006, 13h48
  4. [VB][SQL][debutant]ca doit etre simple...
    Par Treuze dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 11/01/2006, 20h02
  5. [SQL][debutant]le jour où xxx à le plus d'activité
    Par goussepi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/12/2005, 13h52

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