2017-02-08 1 views
0

J'ai créé 2 tables. L'un contient 5 terrains de golf (nom & adresse). l'autre est le pair et les yards pour tous les 18 trous par terrain de golf (clé étrangère pour lier aux cours). J'ai créé une fonction getYards pour retourner le nombre de yards pour un cours. J'ai créé une deuxième fonction, getPar, pour retourner le pair total pour un cours. Ceux-ci travaillent chacun. J'ai maintenant besoin de créer une vue pour afficher le nom du cours et le par et le yardage en utilisant les 2 fonctions. getYards Fonction:Comment créer une vue qui appelle des fonctions stockées dans MySQL?

DELIMITER $$ 

CREATE FUNCTION getYards (id INT) 

RETURNS INT (5) 

BEGIN 

    DECLARE totalyards INT; 

    SELECT SUM(hole_yards) INTO totalyards FROM golf_holes WHERE id=golf_id; 

    RETURN totalyards; 
END$$ 

DELIMITER ; 

La fonction de getPar est très similaire à l'aide hole_par au lieu de verges. Maintenant, je veux créer une vue avec le nom du cours, le par et le yardage en utilisant les fonctions getPar et getYards. J'ai essayé de chercher et je ne suis pas assez informé pour comprendre. Je sais que c'est vague, mais quelqu'un peut-il m'aider ... rester simple! merci à l'avance. Je suis programmeur Cobol depuis près de 40 ans. J'essaie d'apprendre MySQL alors j'ai très peu de connaissances avec SQL.

+0

J'espère que ça va pour vous, j'ai édité votre ligne supérieure de votre message pour être une question plus descriptive. Stack Overflow aime la ligne de titre pour être un résumé de votre question réelle. J'ai déplacé votre description de votre contexte de programmation au bas de la publication. –

Répondre

0

Si vous voulez rester simple, je ne recommanderais pas d'utiliser des fonctions stockées dans la définition de votre vue.

Au lieu de cela, vous pouvez simplement joindre les deux tables.

Quelque chose comme cela devrait fonctionner pour vous:

create or replace view v_golf_courses as 
select golf_courses.id as golf_course_id, 
    golf_courses.name as golf_course_name, 
    sum(golf_holes.yards) as course_yardage, 
    sum(golf_holes.par) as course_par 
from golf_courses 
    inner join golf_holes on golf_holes.golf_course_id = golf_courses.id 
group by golf_courses.id, golf_courses.name; 
0

En supposant que la colonne id dans votre table de cours est également nommé golf_id

SELECT name, getPar(golf_id) as par, getYards(golf_id) as yards 
FROM courses 

Cependant, vous ne avez pas vraiment besoin d'UDF pour cela:

SELECT a.name, sum(b.hole_par) as total_par, sum(b.hole_yards) as total_yards 
FROM courses a 
JOIN golf_holes b 
ON a.golf_id = b.golf_id 
GROUP BY a.golf_id