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 :

Valeur Maximale multi-Tables


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Valeur Maximale multi-Tables
    Bonjour tlm;

    J'ai une basée de données d'une centaine de tables, avec l'attribut "identifiant" (différent de l'Id) en commun.
    Ma question: comment on peut récupérer la valeur maximale de la colonne 'identifiant' .

    Exp:
    Table 1 Table 2 Table 3
    identifiant Identifiant Identifiant
    1 ............. 2................. 80
    23............. 3 ................. 81
    52........... 17..................102

    Le max dans ce cas est : 102
    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Je ne pense pas qu'il y ai plus simple que de prendre le max de tous les max :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT MAX(identifiant) FROM (
    SELECT MAX(identifiant) AS identifiant FROM table1
    UNION
    SELECT MAX(identifiant) AS identifiant FROM table2
    UNION
    SELECT MAX(identifiant) AS identifiant FROM table3
    ) t
    Avec 100 tables ça commence à être lourd...

  3. #3
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Votre modèle est très curieux
    Quel peut être le besoin qui d'une part nécessite une centaine de tables ayant une colonne identifiant, et d'autre part nécessite de trouver le plus grand de ces identifiants ?

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci à vous Fred_34 et FSiebert pour votre intérêt.
    Pour la réponse de fred, c'est la solution que j'ai mis en place actuellement, mais en raison de l'importance de la base j'aimerais bien trouvé une solution miracle :p (de qlq ligne) qui me permettra d’alléger le code source.
    Pour la remarque de FSiebert, effectivement je travail sur un gros projet.Et en ce moment, j'ai besoin de mettre en place des Triggers qui vont me permettre d'incrémenté "l'identifiant" à chaque insertion. Par contre ces triggers perrons être arrêtés avec une opération de l'utilisateur. Et au moment de la réactivation de ces triggers,j'ai besoin en effet de récupérer la valeur maximale de l'identifiant.
    Merci

  5. #5
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Utiliser des triggers pour mettre en place un auto-incrément me semble être une bien mauvaise idée.
    Par ailleurs, quel peut-être l'utilité d'arrêter l'incrémentation d'un identifiant ?
    Fonctionnellement, que représente cet identifiant ?

    J'aimerai comprendre le besoin

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ce qui est en effet difficilement compréhensible sans plus de précisions, c'est le fait que les identifiants soient répartis dans plusieurs tables mais ne correspondent qu'à une seule séquence d'auto-incrémentation.

    Dans un modèle de données normalisé, les entités types du MCD engendrent des tables chacune munies de leur propre identifiant auto-incrémenté et idnépendant des autres identifiants.
    Si dans une BDD, j'ai des villes, des pays, des véhicules, des commandes, des factures, des livraisons... chacune de ces table aura un identifiant allant de 1 à N et peu importe qu'il y ait un 12 dans chaque table. Ces identifiants sont des clés techniques sans signification.

    Votre problème est donc peut-être plutôt un problème de conception de votre BDD que de réalisation d'une requête SQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  7. #7
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ce qui est en effet difficilement compréhensible sans plus de précisions, c'est le fait que les identifiants soient répartis dans plusieurs tables mais ne correspondent qu'à une seule séquence d'auto-incrémentation.
    Citation Envoyé par e-youness85 Voir le message
    J'ai une basée de données d'une centaine de tables, avec l'attribut "identifiant" (différent de l'Id) en commun.
    Apparemment il y a bien un ID technique indépendant dans chaque table. Cet "identifiant" doit avoir une signification fonctionnelle quelconque mais j'ai du mal à saisir l'intérêt.

    Sinon, j'approuve CinePhil

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    J'imagine que cet "identifiant" peut par exemple servir de "version".

    J'ai utilisé un système similaire pour synchroniser une base maître et des bases clientes, en utilisant le type "timestamp" de MS SQL Server, qui est un auto-incrément global à la base. Ceci me permettait d'isoler facilement, entre deux synchronisation, les lignes qui avaient été modifiés depuis la dernière synchro.

    Dans le cas précis, je pense que le mieux, c'est de créer une SEQUENCE, et si MySQL ne supporte pas les séquences, en fabriquer une de toute pièce, en utilisant une table compteur et en écrivant deux fonctions "getCurrentValue" et "getNextValue".

    Ainsi, les trigger sur les tables appelerons "getNextValue" pour récupérer la prochaine valeur, et dans les requête select, "getCurrentValue" pour connaître la valeur actuelle du compteur.

    Ceci évitera d'aller lire des millions de lignes dans une centaine de table, mais plutôt une unique ligne dans une unique table, ce qui est quand même un peu plus optimisé.
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. valeur maximale de session.timeout?
    Par ryan dans le forum ASP
    Réponses: 3
    Dernier message: 13/09/2004, 22h11
  2. Sélection multi table avec condition
    Par iuz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/05/2004, 15h04
  3. UPDATE multi-tables sous SQL Server
    Par Cybernet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/03/2004, 15h34
  4. Valeur maximale d'un tableau
    Par Yana dans le forum Langage
    Réponses: 4
    Dernier message: 20/06/2003, 15h21
  5. [VB6] [Scrollbar] Valeur maximale supérieure à 32750
    Par néo333 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/12/2002, 10h24

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