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

PHP & Base de données Discussion :

Requete SQL colonne virtuelle qui s'incrémente


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut Requete SQL colonne virtuelle qui s'incrémente
    Bonjour,

    Pour faire un top, je cherche à créer une colonne virtuelle qui s'incrémente automatiquement est ce possible ? peut etre que ce n'est pas la meilleur solution, mais je n'en vois pas d'autre pour ressortir la position du classement.

    Merci.

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Oui, avec AUTO_INCREMENT sur la colone et à condition qu'il n'y en ait pas une autre.
    Sinon il faut que tu aies recours au triggers ou aux routines.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    Je ne trouve pas la synthaxe exacte, pouvez vous me donner un coup de main ?

    J'ai testé avec une requete du genre mais ça ne fonctionne pas :
    SELECT Auto_increment AS numero FROM `table_fiche`

    merci.

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    C'est pour faire quoi au juste ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    Exactement, disons que je calcul une note avec AVG pour un artiste (je tiens un petit site de critique cinéma) en fonction des critiques qu'il a reçu et des films dans lequel il joue, le tout avec une requete.

    J'ai déjà la requete fonctionnelle qui me sort virtuellement dans l'ordre des notes :
    -nom
    -note

    je voudrais pouvoir rajouter une autre colonne à partir de rien et virtuellement qui indiquerait la position, il suffirait juste d'un équivalent $i++.

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Mais la position par rapport à quoi ?? Dans le classement ? Dans une liste à afficher ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    Une position par rapport à l'ordre des champs dans le résultat de requète, le premier champ retournant 1, le suivant le 2, etc...

    mon resultat de requete actuelle est par exemple :
    henry | 15
    marc | 14.9
    toto | 14.5

    aprés amélioration de la requete j'ai
    1 | henry | 15
    2 | marc | 14.9
    3 | toto | 14.5

    de façon à ce que quand je fait un WHERE nom=toto ça me sorte le 3.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    il faut mettre un index primaire à ta table avec un auto_increment, tu peux faire ca dans phpmyadmin, mais bon c'est la base du SQL ça...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    Je sais évidemment mettre une clef primaire et un auto increment.

    En fait les données que j'affichais à titre d'exemple sont le résultat d'une requete assez complexe, mais elles n'existent pas en tant que tel dans une table.

    La note est calculée et créee en tant que colone de résultat avec un AVG() as MOYENNE.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Gingirou Voir le message
    Je sais évidemment mettre une clef primaire et un auto increment.

    En fait les données que j'affichais à titre d'exemple sont le résultat d'une requete assez complexe, mais elles n'existent pas en tant que tel dans une table.

    La note est calculée et créee en tant que colone de résultat avec un AVG() as MOYENNE.
    les positions c'est à faire après lors de l'affichage

  11. #11
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    position par rapport à l'ordre des champs dans le résultat de requète
    Utilise un compteur en PHP, je n'arrive toujours pas à comprendre où ça coince...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $compteur = 1;
    while ($row = mysql_fetch_assoc($results)) {
      // affiche ton champ
      $compteur++;
    }

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @rank=0;
    SELECT @rank:=@rank+1 as rank, autres_champs etc.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    Merci beaucoup Sabotage, cela m'avance grandement sur le sujet

    Par contre pour execution dans un script php le SET fonctionne t-il ? ou doit-on l'initialiser dans la requete, du coup comment faire ?

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    tu dois le faire en 2 requêtes, (ou requête multiple avec mysqli)

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    Cela fonctionne, j'ai bien une requête qui me retourne une colonne avec le rank en première colonne et le nom de l'artiste, note...

    il reste cependant un soucis : quand j'effectue une condition restrictive "Where idartiste=4" la colonne du rank est évidemment à 1 vu qu'il n'y a qu'un seul résultat.

    Du coup je dois faire un while en php sur la requête sans aucune condition jusqu'à trouver l'id. Ce n'est pas très optimisé comme méthode vu qu'il y a 9000 champs à balayer à chaque fois...

    Vous avez une idée pour que le champs rank soit le même après condition ?
    (Sinon, la meilleure solution est peut être de créer une tache cron avec une nouvelle table qui reprend le top...).

Discussions similaires

  1. SQL: colonnes virtuelles
    Par tilolebo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/05/2009, 15h21
  2. Réponses: 1
    Dernier message: 15/02/2008, 16h20
  3. Requete sql vers ORACLE qui renvoi une erreur
    Par lilou77 dans le forum Oracle
    Réponses: 7
    Dernier message: 29/01/2007, 09h52
  4. [where] requete sql avec OR qui déconne
    Par nannous dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/01/2007, 12h02
  5. Réponses: 15
    Dernier message: 22/07/2005, 09h49

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