【问题标题】:Generated view filled with NULL生成的视图填充为 NULL
【发布时间】:2016-08-05 12:48:15
【问题描述】:

更新:问题似乎已解决,这是因为我在声明时使用了不同的小写字母而不是大写字母。但是,我现在面临一个问题,即视图“vw_formdatahard”只是填充了多个“NULL”。我要疯了。

我有一个程序可以根据 Wordpress 和 Buddypress 数据库中的可用数据创建视图。这在我的本地 Mamp 服务器上运行得很好,但是每当我在托管服务器上调用该过程时都会给我一个错误。即使我将整个数据库从本地服务器复制到在线服务器,它仍然会返回错误。我不是 mysql 英雄,所以我要在这里深究.. 为什么不运行?

以下查询失败:“CALL stp_FormQueryBuilder(); MySQL 说:#1054 - 'field list' 中的未知列 'd.user_id'

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

【问题讨论】:

  • 请注意,您的左连接作为常规内连接执行,因为您在 where 子句中有右侧表条件。
  • 更改为 D.user_id
  • 可能是因为表别名是D,而你使用d来选择
  • @Bert 你是绝对正确的。我犯了一个愚蠢的错误,但仍然感谢你!
  • 只是想知道,为什么这对一个有效,而对另一个无效?

标签: php mysql sql view phpmyadmin


【解决方案1】:

您从未定义过别名 d 只是 D 并且这些是不同的,因为别名区分大小写。

【讨论】:

  • 就是这样......我一直盯着自己看!
【解决方案2】:

您声明大写字母“D”并使用小写字母“d” 所以,随便换一个

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2014-01-05
    • 2013-06-23
    • 2014-11-01
    相关资源
    最近更新 更多