如果表存在,如何按列排序,如果不存在,则如何按另一列排序



我有一个通用函数(php),它通过匹配列值来检索表的多条记录,并按datetime字段排序。在某些情况下,几乎同时插入的多个记录的datetime是相同的,并且在这些表中还有另一列是记录号,一个自动递增的数字。我想检查表中是否有这个记录号列,如果有,按它排序。否则,如果记录号列在表中不存在,我想按datetime字段排序。我可以编写一个单独的函数,对记录编号进行排序,但更喜欢使用mysql解决方案的单个函数来处理。

我只是想知道这是否可以做到?

使用IF、Exist或orderderby ?

作为一个非常广泛的描述,您可以将SQL查询执行视为由单独的阶段组成:

  1. 解析查询:检查语法,确定哪些位是表名,字符串的开始和结束位置,是SELECT还是UPDATE等。这就是MySQL获取PHP提供的字符串并将其分解为一些内部片段的地方。
  2. 规划查询:确定涉及哪些表和列,如何过滤和操作它们,可以使用哪些索引和优化。只剩下未知数是占位符您使用数据,以防止SQL注入。
  3. 执行查询:插入实际值,获取索引和数据,并通过计划的步骤运行以获得所需的输出或效果。这是您绑定到占位符的实际值使用的地方。

重要的是,步骤2通常不处理"if"而"也许",它期望直接被告知"使用这个表的这个列"。使用哪个表的任何选择都必须在任何内容到达数据库之前发生。

在你的例子中,这意味着表的选择发生在PHP中;但是PHP只是构建一个字符串,它不知道哪些列存在,所以它也不能自动做出决定。

简而言之,你需要编写一些自定义代码来做到这一点:有一个列表,其中包含哪些表使用哪个列进行排序;或者对系统视图(如INFORMATION_SCHEMA.COLUMNS)进行额外的查询来查找,然后在PHP中使用条件逻辑。

相关内容

最新更新