mysqli_query("SELECT login.validto,
(SELECT databases.databasename FROM DB1.databases WHERE databases.ID = login.ID ORDER BY databases.lastused DESC LIMIT 1) AS dbname,
(SELECT users.username FROM dbname.users WHERE users.ID = '2') AS username
FROM DB1.login
WHERE login.token = 'abc13def456';");
是否可以使用别名 dbname 作为子查询的数据库,而不是使用PHP的2个单独查询?
我使用1个数据库来处理所有登录,然后我们使用X数据库来保存所有客户数据,每个客户使用一个数据库,以后客户可以在数据库之间进行更改。
我得到了错误:
Error Code: 1142
SELECT command denied to user 'myMySQLuser'@'myMySQLhost' for table 'users'
将 dbname 更改为真实数据库名称可以正常工作, dbname 和真实数据库是相同的,但我想从我的1个查询而不是2个查询PHP脚本。
答案 0 :(得分:0)
可以使用existing solution在MySQL服务器上创建一个procedure,它将从您的PHP应用程序中调用。
CREATE PROCEDURE my_proc()
BEGIN
DECLARE @dbname, @username VARCHAR(25);
# Set @dbname value
SELECT databases.databasename INTO @dbname FROM DB1.databases WHERE databases.ID = login.ID ORDER BY databases.lastused DESC LIMIT 1;
# Create query to set @username value from required database
SET @user_query = CONCAT('SELECT users.username INTO @username FROM ', @dbname, '.users WHERE users.ID =2;');
PREPARE stmt FROM @user_query;
EXECUTE stmt; # set @username value
DEALLOCATE PREPARE stmt;
# Main query
SELECT validto, @dbname, @username
FROM FROM DB1.login WHERE login.token = 'abc13def456';
END
您也可以使用所需的参数调用该过程。然后,您将能够使用简单的PHP语句来获取所需的数据。