我有一个Users表,并且正在获取具有ID的用户详细信息(通常方式)。
这就是我获取用户详细信息的方式。
select id,kullaniciadi,FotoGet(K.Foto,K.Gender) from kullanicilar K where id=1;
FotoGet
函数总是返回字符串值,例如“ Photos / sssss.jpg”到目前为止,我还可以使用这种方法,但是我想知道如何使用单个函数来完成此操作?
喜欢
set @uid=1;
Select UserGet(@uid);
我将
id
放在括号内,该函数将运行我的选择查询并返回所有用户详细信息列。 id
,kullaniciadi
,FotoGet(K.id,K.Foto,K.Gender)
我可以使用这种方式获取详细信息吗?
最佳答案
MySQL存储函数不能返回多列,它只能返回单个标量值。
但是您可以设计一个存储过程以返回结果集:
CREATE PROCEDURE UserGet(uid INT)
SELECT id, kullaniciadi, FotoGet(K.Foto,K.Gender) FROM kullanicilar K WHERE id=uid;
然后这样称呼它:
CALL UserGet(1234);
它返回结果集,就像
SELECT
查询一样。DELIMITER //
CREATE PROCEDURE UserGet(IN uid INT, IN column_name VARCHAR(64))
BEGIN
SET @sql = CONCAT('SELECT id, ', column_name, ' FROM kullanicilar K WHERE id=?');
PREPARE stmt FROM @sql;
SET @uid = uid;
EXECUTE stmt USING @uid;
END//
DELIMITER ;
这样称呼它:
CALL UserGet(1234, 'kullaniciadi');
请记住,编写代码以传递有效的列名作为过程参数是您的责任。如果您允许传递不可信的内容,则可能是SQL注入漏洞。
重新发表您的其他评论:
这应该工作正常:
CALL UserGet(1234, 'FotoGet(Foto,Gender)');
关于mysql - MySQL快速用户选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25669464/