我有表一和表二,两者都有一个名为“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 应该有效,但它仅适用于具有相同列数的表,或者如果您指定了所需的列(换句话说,您不能使用 * 符号)
所以,如果你有类似表格的表格:
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/