生成的视图填充了 NULL
Generated view filled with NULL
更新: 问题似乎已解决,这是因为我在声明时使用了不同的小写而不是大写。但是,我现在面临一个问题,即视图 "vw_formdatahard" 只填充了多个 "NULL"。我要疯了。
我有一个程序可以根据 Wordpress 和 Buddypress 数据库中的可用数据创建视图。 运行 在我的本地 Mamp 服务器上运行良好,但每当我在我的托管服务器上调用该过程时都会给我一个错误。即使当我将整个数据库从本地服务器复制到在线服务器时,它仍然是 returns 错误。我不是 mysql 英雄,所以我要走极端。为什么这 运行 不行?
The following query has failed: "CALL stp_FormQueryBuilder
();
MySQL said: #1054 - Unknown column 'd.user_id' in 'field list'
BEGIN
DECLARE sqlText text;
DROP VIEW IF EXISTS vw_FormDataRows;
CREATE VIEW vw_FormDataRows AS
SELECT d.user_id, f.name,
CASE WHEN left(f.name, 4) = 'FOTO' && LEFT(d.value, 9) = '/profiles' THEN CONCAT("/wp-content/uploads",d.value)
ELSE d.value END AS 'value'
FROM wp_bp_xprofile_fields AS F
LEFT JOIN wp_bp_xprofile_data AS D ON F.id = D.field_id
WHERE
parent_id = 0
AND group_id = 1
AND d.user_id IN(SELECT U.user_id FROM wp_usermeta AS U WHERE U.meta_key = 'wp_user_level' AND U.meta_value = '0')
ORDER BY d.user_id, f.id;
DROP TEMPORARY TABLE IF EXISTS temp1;
CREATE TEMPORARY TABLE temp1 (SELECT b.user_id, b.name, b.value
FROM (SELECT d.user_id, f.name, d.value
FROM wp_bp_xprofile_fields AS F
LEFT JOIN wp_bp_xprofile_data AS D ON F.id = D.field_id
WHERE
parent_id = 0
AND group_id = 1
AND d.user_id IN(SELECT U.user_id FROM wp_usermeta AS U WHERE U.meta_key = 'wp_user_level' AND U.meta_value = '0')
ORDER BY d.user_id, f.id ) AS B);
SET @sql = NULL;
SET group_concat_max_len = 4096;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN name = ', name,
' THEN value END) AS `', replace(name, ' ','_'), '`'))
INTO sqlText
FROM temp1;
DROP VIEW IF EXISTS vw_FormDataHard;
SET @sql = CONCAT('CREATE VIEW vw_FormDataHard AS SELECT user_id, ', sqlText, '
FROM vw_FormDataRows
GROUP BY user_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DROP TEMPORARY TABLE IF EXISTS temp1;
END
您从未定义过别名 d
,只是 D
,它们是不同的,因为别名区分大小写。
你声明大写字母"D"并使用小写字母"d"
所以,随便换一个
更新: 问题似乎已解决,这是因为我在声明时使用了不同的小写而不是大写。但是,我现在面临一个问题,即视图 "vw_formdatahard" 只填充了多个 "NULL"。我要疯了。
我有一个程序可以根据 Wordpress 和 Buddypress 数据库中的可用数据创建视图。 运行 在我的本地 Mamp 服务器上运行良好,但每当我在我的托管服务器上调用该过程时都会给我一个错误。即使当我将整个数据库从本地服务器复制到在线服务器时,它仍然是 returns 错误。我不是 mysql 英雄,所以我要走极端。为什么这 运行 不行?
The following query has failed: "CALL
stp_FormQueryBuilder
(); MySQL said: #1054 - Unknown column 'd.user_id' in 'field list'
BEGIN
DECLARE sqlText text;
DROP VIEW IF EXISTS vw_FormDataRows;
CREATE VIEW vw_FormDataRows AS
SELECT d.user_id, f.name,
CASE WHEN left(f.name, 4) = 'FOTO' && LEFT(d.value, 9) = '/profiles' THEN CONCAT("/wp-content/uploads",d.value)
ELSE d.value END AS 'value'
FROM wp_bp_xprofile_fields AS F
LEFT JOIN wp_bp_xprofile_data AS D ON F.id = D.field_id
WHERE
parent_id = 0
AND group_id = 1
AND d.user_id IN(SELECT U.user_id FROM wp_usermeta AS U WHERE U.meta_key = 'wp_user_level' AND U.meta_value = '0')
ORDER BY d.user_id, f.id;
DROP TEMPORARY TABLE IF EXISTS temp1;
CREATE TEMPORARY TABLE temp1 (SELECT b.user_id, b.name, b.value
FROM (SELECT d.user_id, f.name, d.value
FROM wp_bp_xprofile_fields AS F
LEFT JOIN wp_bp_xprofile_data AS D ON F.id = D.field_id
WHERE
parent_id = 0
AND group_id = 1
AND d.user_id IN(SELECT U.user_id FROM wp_usermeta AS U WHERE U.meta_key = 'wp_user_level' AND U.meta_value = '0')
ORDER BY d.user_id, f.id ) AS B);
SET @sql = NULL;
SET group_concat_max_len = 4096;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN name = ', name,
' THEN value END) AS `', replace(name, ' ','_'), '`'))
INTO sqlText
FROM temp1;
DROP VIEW IF EXISTS vw_FormDataHard;
SET @sql = CONCAT('CREATE VIEW vw_FormDataHard AS SELECT user_id, ', sqlText, '
FROM vw_FormDataRows
GROUP BY user_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DROP TEMPORARY TABLE IF EXISTS temp1;
END
您从未定义过别名 d
,只是 D
,它们是不同的,因为别名区分大小写。
你声明大写字母"D"并使用小写字母"d" 所以,随便换一个