php - SQL ORDER String (NumberOrder/CurrentYear) 来自两个表

标签 php mysql sorting

我有表一和表二,两者都有一个名为“n_inscription”的字段

我将此值作为“n_inscription”LIKE This (NumberOrder/CurrentYear) VARCHAR 保存到 MySQL 数据库中 保存在两个表中。示例:1/2013、2/2013、13/2014、....等(表一) 和表二有这些值

1/2014, 2/2014,  5/2013...

我试过这个查询:

$list_students = array();

$sql_students = $mysqli->query("SELECT * FROM `es_student_infos`
                                        WHERE school_year='".$school_year."'                                                                    
                                        ORDER BY
                                        CAST(RIGHT(n_inscription, 4) AS UNSIGNED) ASC,
                                        CAST(LEFT(n_inscription, LOCATE('/', n_inscription) - 1) AS UNSIGNED) ASC");

        while($data1 = $sql_students->fetch_object()){
            $list_students[] = $data1;
        }

        $sql_students2 = $mysqli->query("SELECT * FROM `es_upgrades`
                                        WHERE school_year='".$school_year."'                                                                    
                                        ORDER BY
                                        CAST(RIGHT(n_inscription, 4) AS UNSIGNED) ASC,
                                        CAST(LEFT(n_inscription, LOCATE('/', n_inscription) - 1) AS UNSIGNED) ASC");

        while($data2 = $sql_students2->fetch_object()){
            $list_students[] = $data2;
        }

//检索数据:

foreach($list_students AS $student): 
............
endforeach;

此查询中的问题是它对第一个表中的数据进行排序,然后对第二个表中的数据进行排序,结果如下:

1/2013| 2/2013 | 13/2014 | 5/2013 | 1/2014 | 2/2014 | 

查询似乎开始对表一中的数据进行排序,当它完成数据排序后,它再次开始对表二中的数据进行排序。

我想同时对两个表中的数据进行排序,得到这样的结果:

1/2013| 2/2013 | 5/2013 | 1/2014 | 2/2014 | 13/2014 |

而不是

1/2013| 2/2013 | 13/2014 | 5/2013 | 1/2014 | 2/2014 |

表格结构:

表一:

 `es_student_infos` (
  `id_student` int(11) NOT NULL,
  `id_grade` int(11) NOT NULL,
  `id_class` int(11) NOT NULL,
  `n_inscription` varchar(255) NOT NULL,
  `date_inscription` date NOT NULL,
  `cne` varchar(255) NOT NULL,
  `nom_fr` varchar(255) NOT NULL,
  `nom_ar` varchar(255) CHARACTER SET utf8 NOT NULL,
  `prenom_fr` varchar(255) NOT NULL,
  `prenom_ar` varchar(255) CHARACTER SET utf8 NOT NULL,
  `date_naissance` date NOT NULL,
  `lieu_naissance_ar` varchar(255) CHARACTER SET utf8 NOT NULL,
  `lieu_naissance_fr` varchar(255) NOT NULL,
  `tel` varchar(255) NOT NULL,
  `sexe` varchar(10) CHARACTER SET utf8 NOT NULL,
  `ancien_niveau_scolaire` varchar(255) CHARACTER SET utf8 NOT NULL,
  `date_ancienNiveauScolaire` varchar(10) NOT NULL,
  `ancienne_ecole` varchar(255) CHARACTER SET utf8 NOT NULL,
  `type_ecole` varchar(255) CHARACTER SET utf8 NOT NULL,
  `type_inscription` varchar(20) CHARACTER SET utf8 NOT NULL,
  `assurance` int(11) NOT NULL,
  `mensualite` int(11) NOT NULL,
  `nom_tuteur` varchar(255) CHARACTER SET utf8 NOT NULL,
  `profession_tuteur` varchar(255) CHARACTER SET utf8 NOT NULL,
  `adresse_tuteur` varchar(255) CHARACTER SET utf8 NOT NULL,
  `tel_tuteur` varchar(255) NOT NULL,
  `remarques` text CHARACTER SET utf8 NOT NULL,
  `photo` varchar(255) NOT NULL,
  `school_year` varchar(10) NOT NULL,
  `cours_type` enum('jour','soir') NOT NULL,
  `id_subject` int(11) NOT NULL,
  `id_prof_soir` varchar(30) NOT NULL,
  `montant_soir` varchar(255) NOT NULL,
  `archived` enum('0','1') NOT NULL

表二:

  `es_upgrades` (
      `id_upgrade` int(11) NOT NULL,
        `id_student` int(11) NOT NULL,
         `n_inscription` varchar(20) NOT NULL,
         `old_id_class` int(11) NOT NULL,
         `new_id_class` int(11) NOT NULL,
         `status` enum('up','down') NOT NULL,
         `school_year` varchar(30) NOT NULL,
         `date_inscription` date DEFAULT NULL,
         `cne` varchar(255) DEFAULT NULL,
         `nom_fr` varchar(255) DEFAULT NULL,
         `nom_ar` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `prenom_fr` varchar(255) DEFAULT NULL,
         `prenom_ar` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `date_naissance` date DEFAULT NULL,
         `lieu_naissance_ar` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `lieu_naissance_fr` varchar(255) DEFAULT NULL,
         `tel` varchar(255) DEFAULT NULL,
         `sexe` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
         `ancien_niveau_scolaire` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `date_ancienNiveauScolaire` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
         `ancienne_ecole` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `type_ecole` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `type_inscription` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
         `assurance` int(11) DEFAULT NULL,
         `mensualite` int(11) DEFAULT NULL,
         `nom_tuteur` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `profession_tuteur` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `adresse_tuteur` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `tel_tuteur` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `remarques` text CHARACTER SET utf8,
         `photo` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
         `cours_type` enum('jour','soir') CHARACTER SET utf8 DEFAULT NULL,
         `id_subject` int(11) DEFAULT NULL,
         `archived` enum('0','1') DEFAULT NULL

最佳答案

UNION should works but it will work only with tables with same number of columns or if you specified columns you need (in orther words you cannot use * symbol)

UNION 应该有效,但它仅适用于具有相同列数的表,或者如果您指定了所需的列(换句话说,您不能使用 * 符号)

所以,如果你有类似表格的表格:

CREATE TABLE a
(
 id SERIAL,
 dat DATE,

 PRIMARY KEY (id)
);

CREATE TABLE b
(
 id SERIAL,
 dat DATE,
 ip VARCHAR(16),

 PRIMARY KEY (id)
);

你应该使用这样的请求

SELECT dat FROM a
UNION 
SELECT dat FROM b;

那么它应该可以工作了。

并阅读此主题(尤其是第二个答案(有 7 票))可能会有所帮助:Order by descending date - month, day and year

关于php - SQL ORDER String (NumberOrder/CurrentYear) 来自两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27355788/

相关文章:

mysql - 在 Laravel Eloquent 中使用 group by 的子查询

algorithm - c++ std::sort 意外行为(运行时错误)

matlab - 对向量进行排序并计算相同的出现次数

swift - Firebase 从多个位置检索数据(多个查询)

php - 未捕获的 ArgumentCountError:函数 wpdb::prepare():update 的参数太少

php - MySQL group by 的结果不正确

MySQL 选择不同用户的最近传入或传出消息

php - 使用MySQL重新进行SQL注入(inject)攻击,基线要求是什么?

包含数据库查询的 PHP 构造函数来构建对象,好/坏?

javascript - 刷新 div ajax 中的元素