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 :

Recherche de la chaine la plus grande


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 92
    Points
    92
    Par défaut Recherche de la chaine la plus grande
    Bonjour,

    Je me trouve devant un dilemme qui après des heures de recherches infructueuse sur le net je m'en remet à vous.

    Bien je dois faire un petit programme qui me permet de générer des no de commande.

    Exemple quand j'enregistre la première commande il me génère le code "CC-00001-13"
    CC = Code Client
    00001 = no Facture
    13 = année

    EN php je trouver que l'on pouvais incrémenter une string. J'ai fais des test et cela fonctionne.

    Mon dilemme est de pouvoir aller rechercher le code le plus grand dans la table Commande le tous en requête MySQL.

    Veuillez me dire d'une part si c'est possible d’aller chercher la chaine la plus grande.
    Et me donner une piste de recherche

    Merci d'avance pour les renseignements.

    Di Blasio Michael

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 27
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Pour récupérer la facture la plus récente d'un client on pourrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from cmd where cc = 1 order by annee desc, nf desc limit 1;
    Pour concaténer une chaîne en Mysql CONCAT(), exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CONCAT(cc,'-',nf,'-',annee) FROM cmd;
    Et pour avoir la chaîne concaténer la plus grande (Même si cela n'est pas très utile):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from (SELECT char_length(CONCAT(cc,nf,annee)) as taille  FROM cmd) a order by a.taille desc limit 1;

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 782
    Points : 52 780
    Points
    52 780
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par diblasio Voir le message
    Je me trouve devant un dilemme qui après des heures de recherches infructueuse sur le net je m'en remet à vous.

    Bien je dois faire un petit programme qui me permet de générer des no de commande.

    Exemple quand j'enregistre la première commande il me génère le code "CC-00001-13"
    CC = Code Client
    00001 = no Facture
    13 = année
    Il est normal que vous soyez devant des difficultés énormes : vous avez violé la première forme normale imposée par la normalisation relationnelles. Dès lors ce n'est pas une base de données que vous utilisez mais du Excel ou du fichier Cobol... Au choix !

    En effet, la 1FN spécifie que dans un attribut (colonne dans une table) il ne doit y avoir qu'une seule information. Or vous en avez trois et qui plus est de types différents (nombre et caractères).
    En terme de volumétrie c'est en plus stupide, car vous ajoutez 2 caractères "-" parfaitement inutiles, donc du volume en plus donc des perfs en moins.... Songez-y ! Quand vous aurez un million de références cela fera quelque 12 millions d'octets inutiles dans votre table (en UTF8, ce rigolo de MySQL utilise 3 octets par caractères donc 3 dans la table + 3 dans l'index PK = 6 * 2 = 12)

    Commencez par remodéliser en 1FN en mettant vos informations en 3 colonnes.
    Vous arriverez très facilement à écrire votre requête et en sus elle sera performante ! Parce que la solution que vous trouverez avec votre gloubiboulga sera toujours catastrophique en terme de perf et jamais optimisable....
    En sus, vous pourrez présenter vos données par une vue en reconstituant votre horrible clef en concaténant vos colonnes....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/08/2008, 14h04
  2. Réponses: 2
    Dernier message: 16/04/2007, 11h53
  3. Réponses: 13
    Dernier message: 07/01/2007, 19h43
  4. [TP] Recherche du 2e plus grand élément d'un tableau...
    Par Dunk dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 02/03/2006, 19h36
  5. Réponses: 3
    Dernier message: 16/12/2002, 16h12

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