表格结构:
文件夹:
+--------------+--------------+
| Field | Type |
+--------------+--------------+
| id | int(11) |
| project_id | int(11) |
| finished | int(11) |
| approved | int(11) |
| comment | varchar(500) |
+--------------+--------------+
werte:
+---------------------+---------------+
| Field | Type |
+---------------------+---------------+
| id | int(11) |
| folder_id | int(11) |
| form_id | int(11) |
| werte | varchar(5000) |
| number | int(11) |
+---------------------+---------------+
现在我有一种情况,我想按特定顺序从文件夹中检索id字段。我需要的前几个排序很容易实现,因为顺序由表中的字段决定。例如
SELECT id FROM folders ORDER BY approved ASC;
为了使它不那么抽象,werte表保存参数值,就像本例中的日期一样。文件夹可以包含多个表单,而这些表单又包含多个werte。
我的问题是:我想从文件夹表中获取所有ID,按werte中存储的每个id的最新日期排序(每个id在大多数情况下将包含多个相关的werte记录)。
从某个文件夹获取最新日期的有效查询将是
SELECT MAX(STR_TO_DATE(werte, '%d.%m.%Y')) FROM werte WHERE number = 2 AND folder_id = 42;
如何通过第二个查询的结果对第一个查询进行排序?
编辑:
另一个问题的问题是另一个问题。解决方案,
SELECT f.id FROM folders f JOIN werte w ON w.folder_id = f.id WHERE w.number = 2 ORDER BY STR_TO_DATE(werte, '%d.%m.%Y');
将在表格中生成所有日期。但是,我只想从每个id获得一个结果(最新的一个)。每个文件夹都有多个包含日期的 werte 条目,我只希望按每个相应的最大日期排序ID。对于透视图,上面的查询产生大约8000个结果,但表中只有大约1900个不同的ID。