Обновление: Проблема, кажется, исправлена, она произошла из-за меня, используя различные строчные буквы вместо заголовков при объявлении. Однако теперь я столкнулся с проблемой, когда представление «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
Просто примечание, ваши левые соединения выполняются как обычные внутренние соединения, так как у вас есть условия правого столбика в предложениях where. – jarlh
изменить на D.user_id – Rijin
Возможно, потому, что псевдоним таблицы 'D', и вы используете' d' для выбора – Bert