2016-08-05 7 views
1

Обновление: Проблема, кажется, исправлена, она произошла из-за меня, используя различные строчные буквы вместо заголовков при объявлении. Однако теперь я столкнулся с проблемой, когда представление «vw_formdatahard» просто заполнено несколькими «NULL». Я схожу с ума.Сгенерированное представление заполнено NULL

У меня есть процедура, которая будет создавать представления на основе имеющихся данных в базе данных Wordpress & Buddypress. Это нормально работает на моем локальном сервере Mamp, но дает мне ошибку, когда я вызываю процедуру на моем размещенном сервере. Даже когда я копирую всю БД с моего локального сервера на онлайн-сервер, он возвращает ошибку. Я не герой mysql, поэтому я ухожу с глубокого конца здесь. Почему это не сработает?

Следующий запрос не удалось: «CALL stp_FormQueryBuilder(); MySQL сказал: # 1054 - Неизвестный столбец '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 
+0

Просто примечание, ваши левые соединения выполняются как обычные внутренние соединения, так как у вас есть условия правого столбика в предложениях where. – jarlh

+0

изменить на D.user_id – Rijin

+0

Возможно, потому, что псевдоним таблицы 'D', и вы используете' d' для выбора – Bert

ответ

1

Вы никогда не определен псевдоним d просто D и они разные, потому что псевдонимы чувствительны к регистру.

+0

Вот и все. Я смотрел на себя слепо! –

0

Вы Объявить прописную букву «D» и использовать Маленькая буква «d» поэтому, Измените ее

Смежные вопросы