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 :

Compteur dans une vue


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 21
    Par défaut Compteur dans une vue
    Bonjour,

    Je cherche à créer une vue avec une colonne qui serait un identifiant unique.
    Malheureusement, les solutions que j'ai essayé ne fonctionne pas sur les vues:

    par exemple utiliser une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      CREATE VIEW ma_vue AS
      SELECT ma_table.col1,
             @rownum:=@rownum+1 as compteur
      FROM (SELECT @rownum:=0) r, ma_table;
    ...mais l'utilisation de variable n'est pas autorisé dans les vues.

    Ou utiliser un auto_increment, mais il ne peut être utilisé que dans un script de création de table, n'est-ce pas ?

    Merci

  2. #2
    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,
    Tu peux essayer de compter les identifiants inférieurs de ta table dans une sous-requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT (SELECT COUNT(t2.id)+1 FROM ma_table t2 WHERE t2.id < t1.id) as rang,
    t1.col1 FROM ma_table t1
    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)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 21
    Par défaut
    Merci pour cette réponse.

    Seulement ma requête comporte en fait des jointures sur d'autres tables, ce qui fait que j'ai plusieurs enregistrements dans ma vue qui ont le même "ma_table.id".
    Or, avec ta solution, tous ces enregistrements auront la même valeur dans "rang", alors qu'il faut vraiment que chaque enregistrement ai un identifiant unique !

  4. #4
    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
    Ces jointures n'apparaissaient pas dans le post initial. D'où ma proposition.

    Ceci dit chaque ligne résultant de cette requête en jointure doit bien avoir un identifiant unique (addition des identifiants de la chaîne de jointure).
    Ça va complexifier 'cor'assez l'écriture de la sous-requête, mais ça n'est pas infaisable.
    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)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 21
    Par défaut
    Ces jointures n'apparaissaient pas dans le post initial.
    C'était pour que la requête soit plus lisible, et c'est pour ça que j'ai utilisé une colonne "ma_table.col1" et non "id" dans mon select pour justement signaler qu'il ne s'agissait pas d'un identifiant unique...

    Et je n'ai justement rien qui me garantie d'avoir un identifiant unique sur toutes les tables jointes...

  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 sandrinec Voir le message
    Et je n'ai justement rien qui me garantie d'avoir un identifiant unique sur toutes les tables jointes...
    Alors qu'est-ce qui distinguera une ligne d'une autre dans le résultat de la requête ?
    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)

Discussions similaires

  1. Count dans une vue
    Par gldfdp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 05h55
  2. Réponses: 16
    Dernier message: 17/06/2005, 15h44
  3. Paramètres possibles dans une vue ms sql server
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/03/2005, 19h03
  4. Insérer dans une Vue ordonnée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/09/2004, 15h27

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