【问题标题】:PHP / MySQL - syntax to sort array results?PHP / MySQL - 对数组结果进行排序的语法?
【发布时间】:2017-02-20 16:32:58
【问题描述】:

为基于 PHP 的电子商务系统使用自定义模板(期刊 2)。 在控制面板中,有一个加载自定义模块的部分。 问题是,模块是按照创建的顺序呈现的,这使得很难找到合适的模块。 我想按字母顺序对它们进行排序。

如何以及在哪里可以向此函数添加按名称排序功能?

public function all() {
    if (isset($this->get_data['module_type'])) {
        $module_type = $this->db->escape('journal2_' . $this->get_data['module_type']);
        $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'journal2_modules WHERE module_type = "' . $module_type . '"');
    } else {
        $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'journal2_modules');
    }

    foreach ($query->rows as &$row) {
        $row['module_data'] = json_decode($row['module_data'], true);
        if (is_array($row['module_data'])) {
            foreach($row['module_data'] as $key => &$value) {
                if (!in_array($key, array('module_name', 'module_type'))) {
                    unset($row['module_data'][$key]);
                }
            }
        }
    }

    return $query->rows;
}

提前致谢!

【问题讨论】:

    标签: php mysql sorting


    【解决方案1】:

    如果你需要一个特定的顺序,在sql中你可以使用order by子句。在您的情况下,按 module_name 排序可能很有用

      $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 
                 'journal2_modules WHERE module_type = "' . 
                        $module_type . '"  order by module_name ');
    

    【讨论】:

    • @JayBlanchard 谢谢 .. 答案更新了解释 --
    【解决方案2】:

    尝试更改您的查询:

    if (isset($this->get_data['module_type'])) {
        $module_type = $this->db->escape('journal2_' . $this->get_data['module_type']);
        $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'journal2_modules WHERE module_type = "' . $module_type . '" ORDER BY module_data ASC');
    } else {
        $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'journal2_modules ORDER BY module_data ASC');
    }
    

    【讨论】:

    • 做或不做。没有“尝试”。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
    • 你在分裂头发。如果提供的代码实际上适用于 OP,我不认为使用普遍接受的英语,如“试试这个......”会以任何方式减少一个好的答案。未来访问者的质量可以通过相关的投票或接受答案的 OP 来确定。
    • 我可能会很困惑,但您仍然没有向 OP(或未来的访问者)解释您做了哪些更改,为什么要进行更改以及为什么它们应该起作用。我对“试试这个......”的答案没有任何问题,后面有解释。 ¯\_(ツ)_/¯
    • 我不需要指出我所做的更改,因为 OP 应该识别出我更改的他自己的代码,以及有什么区别。另外,差异是“ORDER BY ...”,所以有点明显。
    • 不用担心。只是试图帮助您改进答案,使其对所有级别的开发人员都有价值。
    【解决方案3】:

    在查询的末尾插入一个ORDER BY 条件,如ORDER BY columnName 以按该列排序。

    public function all() {
        if (isset($this->get_data['module_type'])) {
            $module_type = $this->db->escape('journal2_' . $this->get_data['module_type']);
            $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'journal2_modules WHERE module_type = "' . $module_type . '"' . ' ORDER BY ' . $this->get_data['module_order_by']);
        } else {
            $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'journal2_modules ORDER BY ' . $this->get_data['module_order_by']);
        }
    
        foreach ($query->rows as &$row) {
            $row['module_data'] = json_decode($row['module_data'], true);
            if (is_array($row['module_data'])) {
                foreach($row['module_data'] as $key => &$value) {
                    if (!in_array($key, array('module_name', 'module_type'))) {
                        unset($row['module_data'][$key]);
                    }
                }
            }
        }
    
        return $query->rows;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 2021-04-06
      • 2021-06-29
      • 2013-11-23
      • 1970-01-01
      • 2011-09-21
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多