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

Installation MySQL Discussion :

Trouver un ID libre rapidement


Sujet :

Installation MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Par défaut Trouver un ID libre rapidement
    bonjour à tous

    je viens vous voir en espérant pouvoir trouver la meilleure solution à ce que je souhaiterai réaliser

    (pour info, j'utilise du php pour faire des requetes sur une bdd mysql)

    j'ai une base de donnée d'utilisateurs où un champ "ID" est différent pour chaque utilisateur. quand un utilisateur se désabonne alors sa ligne correspondant à son "ID" est supprimée dans la base. quand un utilisateur s'abonne, une fonction php recherche le premier ID de libre pour lui affecter celui ci..

    pour cela j'ai trouvé deux solutions :

    1/ faire une boucle et une requete SELECT pour chaque id jusqu'a temps de trouver un "trou" libre
    2/ ou je rappatrie tous les "ID" de ma table et fais une boucle pour tester dans mon resultat là où il y a un trou (éventuel).

    mes questions sont donc les suivantes :

    existe-t-il une requete dans mysql qui fait direct pile-poil ce que je demande?
    ou alors, laquelle de mes deux solutions est la moins gourmande en ressources pour une très très grande base de données?
    ou bien, existe-t-il une meilleure solutions que celles que je propose?

    je vous remercie par avance du temps que vous pourrez m'accorder

  2. #2
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Par défaut
    j'ai trouvé une solution qui pourrait ptetre le faire..

    créer une base de données qui stockera les "ID" que je supprimerai comme ca j'ai qu'une requete a faire pour savoir quel "ID" est libre dans ma table!!

    l'opération serait la suivante :

    faire une premiere requete COUNT qui me donnera le nombre de lignes de ma base d'utilisateurs.
    faire une deuxieme requete qui me dit si la ligne avec le numéro "ID" égal au nombre de lignes existe dans cette meme base.
    si elle existe c'est qu'il n'y a pas de trou donc je choisis l'ID du COUNT+1, sinon je vais chercher dans ma table secondaire un ID que j'aurai effacé, je l'utilise, et je l'efface de ma table secondaire vu qu'il est réutilisé

    un peu compliké mais un gain de ressources je pense

    qu'est ce que vous en pensez??

  3. #3
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut
    Bonsoir,
    quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select _table.cleunik+1 from _table where (_table.cleunik+1) not in (select _table.cleunik from _table) limit 1
    devrait faire l'affaire non ?

  4. #4
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Par défaut
    salut

    nan ca marche pas

  5. #5
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut
    si, mais il faut rajouter un order by

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Par défaut
    bah ca me fait une erreur comme quoi la syntaxe est mauvaise..

    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
    Erreur
     
    requête SQL :  
     
    SELECT musiciens.ID
    FROM musiciens
    WHERE (
     
    musiciens.ID + 1
    ) NOT 
    IN (
     
    SELECT musiciens.ID
    FROM musiciens
    )
    LIMIT 0 , 30 
     
    MySQL a répondu:
     
     
    #1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT musiciens.ID
    FROM musiciens ) LIMIT 0, 30' at line 5

Discussions similaires

  1. trouver des ports libre avec python
    Par xxiemeciel dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 30/07/2007, 16h41
  2. [PL/SQL] Trouver un emplacement libre!
    Par Tuizi dans le forum Oracle
    Réponses: 16
    Dernier message: 09/06/2006, 17h36
  3. Trouver un emplacement libre
    Par lechewal dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 10/05/2006, 12h41
  4. [Socket] Trouver un port libre rapidemment
    Par chicorico dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 20/05/2005, 15h49
  5. [VB6] [Winsock] Trouver un port libre
    Par Yann dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/10/2002, 11h23

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