2017-08-14 1 views
-1

Voici ma structure de table:Comment créer une vue nécessitant un paramètre?

-- users 
+----+--------+---------------------+----------+--------------------+ 
| id | name |  email   | password |  cookie  | 
+----+--------+---------------------+----------+--------------------+ 
| 1 | Jack | [email protected] | 098u23r8 | kj3409t34034u8rf | 
| 2 | Peter | [email protected] | k0io34r4 | m32i0949y834rf34 | 
| 3 | Martin | [email protected] | fg345t34 | rf34r89p23r49i34 | 
+----+--------+---------------------+----------+--------------------+ 

-- user_details 
+---------+------+----------------------+----------------+ 
| user_id | age |   about  |  date  | 
+---------+------+----------------------+----------------+ 
| 1  | 32 | NULL     | NULL   | 
| 2  | NULL | A senior developer | 1992-02-10  | 
| 3  | 18 | NULL     | 1999-01-06  | 
+---------+------+----------------------+----------------+ 

Maintenant, je veux faire un VIEW comme celui-ci:

Create View `user` as 
SELECT u.id, u.name, u.email 
     ud.age, ud.about, ud.date 
FROM users u 
INNER JOIN user_details -- there is a trigger which makes a row in this table after insert in users table. 
ON u.id = ud.user_id 

Maintenant, je veux utiliser VIEW ci-dessus pour un utilisateur spécifique. Je peux le faire comme ceci:

SELECT * FROM user WHERE id = :user_id 

Mais je suppose que c'est beaucoup de traitement des déchets. Quoi qu'il en soit, comment puis-je ajouter quelque chose comme ce AND u.id = :user_id à la logique de VIEW à chaque fois?

+1

Examinez la vue comme vous l'avez fait dans le dernier extrait. N'importe quel optimiseur de demi-descente le manipulerait correctement. – Mureinik

Répondre

0

Les vues elles-mêmes n'ont aucun paramètre. Cependant, vous pouvez filtrer dans la déclaration select que vous utilisez pour obtenir des données de la view, comme dans tout autre select:

select from `user` where id = :id 

Il n'y a pas d'autre moyen d'inclure le filtrage dynamique dans une vue.

0

La vue ne peut pas avoir de paramètre d'entrée, vous devez donc créer une vue, puis vous pouvez appeler la vue comme une requête de sélection en utilisant la condition d'en fonction du résultat souhaité. Par exemple: -

select from `user` where id = 1; 
select from `user` where id in (1,2);