【问题标题】:MySQL order by(`field`, param1, param2, param3 from JSON arrayMySQL order by(`field`, param1, param2, param3 from JSON array
【发布时间】:2020-02-12 15:28:23
【问题描述】:

我正在构建 Mysql 查询:

select * from `table` order by field(`column`, "param1", "param2", "param3")

其中 param1, param2, param3 来自 JSON 数组 ["param1", "param2", "param3"] 当我将参数硬编码在查询中时一切正常,但是当我准备它时(因为我不知道计数和顺序是什么):

set json_array='["param1", "param2", "param3"]';
select * from `table` order by field(`column`, replace(replace(json_array, '[', ''), ']', ''))

它不工作。

【问题讨论】:

  • 这将是一个很难回答的问题。您可能希望参考在哪里找到有关如何执行此操作的原始文档,即使它不够完整。我用谷歌搜索了它,没有发现任何直接相关的东西。

标签: mysql json sorting field


【解决方案1】:

你必须使用Prepared Statements

SET @json_array='["param3", "param1", "param2"]';
SET @query = CONCAT('select * from `table` order by field(`column`, ',
                    replace(replace(@param, '[', ''), ']', ')'));
PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

DEMO

【讨论】:

  • 对我来说它不起作用 - sqlfiddle.com/#!9/0c738f/1 :-(
  • @iMarh 我找到了 MySQL 5.7 的解决方案。您使用哪个版本的 MySQL?
  • 我的版本是5.5。我看到 5.5 也可以。谢谢阿尔贝托!
  • @iMarh 很高兴为您提供帮助。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受:)
猜你喜欢
  • 2010-10-26
  • 2015-01-03
  • 2012-04-12
  • 2013-05-10
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2011-04-06
  • 2021-11-01
相关资源
最近更新 更多