为什么VARCHAR变量不能在mysql存储过程中使用内部查询作为列名?

时间:2016-04-07 19:05:54

标签: mysql stored-procedures

是否有一个解决方案在列名的select语句中使用变量过滤器而不将其与查询连接?。
不工作

$(
  

问题出在上一个BEGIN Declare StartRow int; set StartRow = ((PageNumber - 1) * PageSize); SELECT t.qid, t.title, t.vote, t.answer_count, t.creation_date, t.uid, t.username, MAX(CASE WHEN t.constantTagNumber = 1 THEN t.tag END) AS tag1, MAX(CASE WHEN t.constantTagNumber = 1 THEN t.tid END) AS tid1, MAX(CASE WHEN t.constantTagNumber = 2 THEN t.tag END) AS tag2, MAX(CASE WHEN t.constantTagNumber = 2 THEN t.tid END) AS tid2, MAX(CASE WHEN t.constantTagNumber = 3 THEN t.tag END) AS tag3, MAX(CASE WHEN t.constantTagNumber = 3 THEN t.tid END) AS tid3, MAX(CASE WHEN t.constantTagNumber = 4 THEN t.tag END) AS tag4, MAX(CASE WHEN t.constantTagNumber = 4 THEN t.tid END) AS tid4, MAX(CASE WHEN t.constantTagNumber = 5 THEN t.tag END) AS tag5, MAX(CASE WHEN t.constantTagNumber = 5 THEN t.tid END) AS tid5 FROM ( SELECT questions.id as qid, title, creation_date, vote, answer_count, tags.id as tid, tag, username, users.id as uid, IF (@prev = qid ,@c := @c + 1,@c := 1) constantTagNumber, @prev := qid FROM ( SELECT @prev := 0 ,@c := 1) var,question_tags INNER JOIN tags ON question_tags.tid = tags.id RIGHT JOIN questions ON question_tags.qid = questions.id INNER JOIN users ON users.id=owner_id ORDER BY qid,tid ) t GROUP BY t.qid ORDER BY filter desc LIMIT StartRow,PageSize; END   这里order by filter是我用作参数的filter变量。


由于filter是一个变量,上面的代码不起作用。
有人可以建议一个简单的解决方案,使其工作。

  

使其工作意味着,我需要使用列名作为来自参数的顺序使用。

更新

varchar

我更新了上面的代码,我在这里缺少什么。

1 个答案:

答案 0 :(得分:1)

您正在接近:更改您的代码以创建包含SQL的VARCHAR,使用IF / ELSE逻辑来连接您的订单。然后将此SQL传递给预准备语句:

SET @sql = "Your SQL";
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;