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

  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

  7. #7
    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
    Citation Envoyé par RiPSO
    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
    Il y en manque un bout ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT musiciens.ID+1 FROM musiciens WHERE (musiciens.ID + 1) NOT IN (SELECT musiciens.ID FROM musiciens) ORDER BY ID LIMIT 1
    Il faut faire attention aux caractères invisibles style "tab" lors des copier-coller et question très triviale "musiciens.ID est bien numérique ?

  8. #8
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Par défaut
    oui il manquait le premier "+1" mais je l'avais retiré car ca ne devait pas poser de probleme : après je peux rajouter le +1 dans mon code php.
    sinon il n'y a pas de probleme de tab, et j'ai testé le code dans une requete php, et aussi directement sous phpmyadmin et ca ne marche pas, j'ai toujours la meme erreur.. snif

  9. #9
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Par défaut
    et oui ID est un int unsigned

    ca ne pourrait pas venir d'un probleme de version de mysql?? par exemple une version qui n'accepterai pas les requetes imbriquées l'une dans l'autre..

    j'ai MySQL 4.0.15-max-debug

  10. #10
    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
    Citation Envoyé par RiPSO
    et oui ID est un int unsigned

    ca ne pourrait pas venir d'un probleme de version de mysql?? par exemple une version qui n'accepterai pas les requetes imbriquées l'une dans l'autre..

    j'ai MySQL 4.0.15-max-debug
    Je viens de faire l'essai suivant, sur une de mes vraies bases online
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT _documents.doc_cleunik +1
    FROM _documents
    WHERE (
    _documents.doc_cleunik +1
    ) NOT
    IN (
     
    SELECT _documents.doc_cleunik
    FROM _documents
    )
    ORDER BY _documents.doc_cleunik
    LIMIT 1
    pas d'erreur et il me retourne bien un premier trou !!
    Test fait sur phpMyAdmin 2.7.0-pl1, MySQL 4.1.15 sur un linux fedora a priori, la table est en INNODB. Ma "doc_cleunik" est un bigint(20)
    Je pourrai faire des essais demain, sur d'autres bases, sur windows et avec d'autres requêteurs ...

  11. #11
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Citation Envoyé par RiPSO
    ca ne pourrait pas venir d'un probleme de version de mysql?? par exemple une version qui n'accepterai pas les requetes imbriquées l'une dans l'autre..

    j'ai MySQL 4.0.15-max-debug
    Bingo, pas de sous-requêtes avant la 4.1

    Voir pour réécrire avec une jointure externe gauche http://mysql.developpez.com/faq/?pag..._sous_requetes

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

    c'est pas juste!!!

    le probleme alors c'est que je ne sais pas quelle version de mysql sera utilisée chez mon futur hebergeur.. (amen ou ovh surement.. il faut que je me renseigne sur les pour ou contres..)

    que me conseillez vous dans ce cas?? la solution de créer une table qui contiendra tous les ID effacés n'est peut etre pas trop mauvaise nan?

  13. #13
    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
    Citation Envoyé par Biglo
    Bingo, pas de sous-requêtes avant la 4.1

    Voir pour réécrire avec une jointure externe gauche http://mysql.developpez.com/faq/?pag..._sous_requetes
    oups, j'ai pas le réflexe !! D'autant qu'elle commence à dater cette version : septembre 2003, c'est antediluvien ça ...

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

    qu'est ce que je fais alors?

    sur ovh ils disent : Une fois livré, le serveur est opérationnel pour l'hébergement (Apache 1, mail, admin, PHP 4, MySQL 3 et OVHm)
    ..

    j'imagine que chez tous les hebergeurs c la meme, je vais installer une version + neuve je crois et lacher ma vieille version qui m'a tant aidé durant ces années.. snif

  15. #15
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Par défaut
    merci à tout les 2 je vais m'upgrader en fait..

    alors merci a biglo pour la précision et puis Christophe Charron pour ce style de requete que je ne connaissais pas!!

  16. #16
    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
    Citation Envoyé par RiPSO
    maieuuu

    qu'est ce que je fais alors?

    sur ovh ils disent : Une fois livré, le serveur est opérationnel pour l'hébergement (Apache 1, mail, admin, PHP 4, MySQL 3 et OVHm)
    ..

    j'imagine que chez tous les hebergeurs c la meme, je vais installer une version + neuve je crois et lacher ma vieille version qui m'a tant aidé durant ces années.. snif
    Heu MYSQL 3 ça me laisse un peu dubitatif !!! Je doute qu'ils aient beaucoup de nouveaux clients avec une aussi vieillle version. (N'oublie pas le "résolu")

  17. #17
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Par défaut
    a bah vi j'en suis a la 4.. bon.. jvais faire une pause avant de me relancer dans l'aventure
    c'est bizarre ils disent la version 3 pour php4 et mysql5 pour php5..
    mouais, bref merci pour tout

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