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

SQL Procédural MySQL Discussion :

MySQL 4.1 ou 5, creer une fonction


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut MySQL 4.1 ou 5, creer une fonction
    Bonjour, j'ai une big requete qui me renvoit un certain nombre de resultats (jusqu'ici pas de problemes ^^). Et je voudrais filtrer ces resultats selon une comparaison dynamique.
    c'est à dire, ma requete qui fait des JOIN etc.. me renvoie des id d'utilisateurs.
    à partir de là, j'aimerais passer en paramatre un id "type" d'un utilisateur, mais qui peut changer (d'où le besoin de faire une fonction) sur laquel j'effectue des comparaisons un à une selon des criteres.
    Je pensais faire ca en php, mais avec les classes c'est trop long (je suis obligé, en php de :
    1)creer ma classe user
    2) pour chaque valeur de mon retour SQL, creer une classe user, et comparer à l'aide d'une fonction php s'il est ok ou pas par rapport au user du "1)"

    bref ca marche mais j'ai la sensation que c'est lent. Soit c'est mon serveur qui est pourris, soit c'est effectivement tres lent.

    la fonction que je souhaite faire est de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function (lettre1, lettre2, lettre3, lettre4,
    <div style="margin-left:40px">lettrevisiteur1, lettrevisiteur2, lettrevisiteur3, lettrevisiteur4)</div>{
     var resultat = 0;
    if (lettre1==lettrevisiteur1) resultat+=15;
    if (lettre2==lettrevisiteur1 || lettre2==lettrevisiteur2) resultat+=8;
    etc... (mais que dans ce genre là, tres simple)
     
    return resultat;
    }
    et si le resultat est par exemple, plus grand que 15, bah on selectionne l'utilisateur.
    Comme le SQL est extremement plus rapide que le php la dessus, et ca soulagera aussi la memoire du serveur. Et enfin pour ma culture personnelle
    Si une gentille âme pouvait ne serait-ce que m'indiquer un point de depart, un lien m'aidant bien (je ne trouve pas grand chose, j'ai du mal à cibler ce que je cherche, au niveau des instructions meme).

    Bref :S merci encore de votre aide!
    Paul

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Bonjour,

    Petite question, pour être sûr de bien comprendre : lettre1, lettre2, ..., lettrevisiteur1... ce sont des champs de ta base ou pas ?

    Parce que dans ce cas, en utilisant les opérateurs IF ou CASE, tu n'as même pas forcément besoin d'une fonction.
    Voilà 2 liens pour démarrer : fonctions de contrôle
    procédures et fonctions

    En espérant que ça t'aide...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre averti
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut
    merci!

    Donc en fait, j'ai exactement 2champs de 2 CHAR(4)
    je dois prendre chaque lettre une par une et les comparer, selon ces resultats en tirer un chiffre que j'analyse.

    pour donner plus d'infos precises : j'ai un utilisateur modele (qui peut varier)
    Il y a un champs CHAR(4).
    Maintenant j'ai une base avec une tonne d'autre utilisateurs. Je dois, pour savoir si on peut les selectionner, utiliser la fonction suivante que j'ai essayé de créer :

    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
    23
    24
    25
    26
     
    CREATE FUNCTION comaparaison (mot1, mot2) RETURNS INT
    BEGIN
    	DECLARE lettre1, lettre2, lettre3, lettre4, lettrevisiteur1, lettrevisiteur2, lettrevisiteur3, lettrevisiteur4 CHAR(1);
    	DECLARE resultat INT;
     
    	SET resultat = 0;
    	SET lettre1 = SUBSTRING(mot1, 1, 1);
    	SET lettre2 = SUBSTRING(mot1, 2, 1);
    	SET lettre3 = SUBSTRING(mot1, 3, 1);
    	SET lettre4 = SUBSTRING(mot1, 4, 1);
    	SET lettrelettrevisiteur1 = SUBSTRING(mot2, 1, 1);
    	SET lettrelettrevisiteur2 = SUBSTRING(mot2, 2, 1);
    	SET lettrelettrevisiteur3 = SUBSTRING(mot2, 3, 1);
    	SET lettrelettrevisiteur4 = SUBSTRING(mot2, 4, 1);
     
    	SELECT CASE (lettre1==lettrevisiteur1) 
    			WHEN true THEN (SET resultat = resultat + 16) END;
     
    	SELECT CASE (lettre1==lettrevisiteur2) 
    			WHEN true THEN (SET resultat = resultat + 8) END;
     
    //etc etc... mais tous comme les 2requetes au dessus
     
    	RETURN resultat;
    END;
    et à la fin pour savoir si l'utilisateur est eligible ou pas je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CASE WHEN (comparaison(champuserXXX, champuserType) > 24) THEN userXXX
    mais là je suis pas sur de bien faire
    Pour moi le sql se resumait à des select, udate, delete dans du php.
    Là faut que je vois comment "enregsitrer" la fonction dans la base, ou la passer à sql en meme temps que la requete (mais je suppose que tout mettre dans mysql_query séparé par des ";" devrait suffire.

    Je teste tout ca pour commencer merci encore de tes liens et du temps que tu m'as consacré!

  4. #4
    Membre averti
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut
    apres avoir tenté je bloque un peu sur la validation de ma syntaxe :
    la fonction que j'essaye deja d'executer dans mon phpmyadmin me donne une erreur sur le DECLARE on dirait.
    Pourtant j'ai bien une version 5 :'(

  5. #5
    Membre averti
    Inscrit en
    Août 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 46
    Par défaut
    Bonjour à tous. Moi j'utilise fréquemment cette requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE matable SET monchamp=replace(monchamp , exp1, exp)
    je souhaite écrire une fonction du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE function Remplacer(_table,_champ,_lettre1,_lettre2) RETURNS INT
       BEGIN
       UPDATE _table SET _champ =replace( _champ , _lettre1, _lettre2);
       RETURN 1;
    END
    Mais en fait je vois pas bien comment faire. donnez moi un coup de main SVP

Discussions similaires

  1. comment creer une fonction en VBA heur-heur*le prix
    Par bolton100 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2007, 10h17
  2. Créer une fonction Excel
    Par Robert G dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/08/2007, 20h57
  3. Réponses: 8
    Dernier message: 30/08/2006, 10h08
  4. creer une fonction avec arguments
    Par niglo dans le forum ASP
    Réponses: 3
    Dernier message: 03/06/2005, 08h04
  5. [langage] Creer une fonction qui met en majuscule ?
    Par Cyber@l dans le forum Langage
    Réponses: 6
    Dernier message: 04/12/2003, 18h44

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