我有一个MySQL表结构,需要运行一个特定的查询,但我无法以某种方式来解决这个问题。首先,这是相关的表结构。

资料夹:

+--------------+--------------+
| Field        | Type         |
+--------------+--------------+
| id           | int(11)      |
| project_id   | int(11)      |
| finished     | int(11)      |
| approved     | int(11)      |
| comment      | varchar(500) |
+--------------+--------------+


韦特:

+---------------------+---------------+
| 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;


但是,我还需要另一种排序方式,其中ID是按照werte表中werte列中的值排序的。为了使它不太抽象,werte表保存参数值,例如本示例中的日期。文件夹可以包含多种形式,而表单又包含多种形式。所以我的目标是:从werte表的werte列中获取文件夹中的所有ID。期望werte列包含日期字符串,因此在那里需要使用STR_TO_DATE(werte,'%d。%m。%Y')。

检索包含日期的所有werte字段的有效查询为

SELECT STR_TO_DATE(werte, '%d.%m.%Y') FROM werte where number = 2;


我只是不知道如何将其与我所谈论的第一个查询(从文件夹中选择所有ID)结合在一起。

最佳答案

如果我理解正确,则可以使用join

select f.*
from folders f join
     werte w
     on w.folder_id = f.id
where w.number = 2
order by f.approved, str_to_date(werte, '%d.%m.%Y');


注意:如果您要以字符串形式存储日期,请使用ISO标准格式YYYY-MM-DD。如果使用此格式,则str_to_date()是不必要的,因为字符串表示形式的字母顺序是正确的。

另外,如果werte表中可能没有匹配项,则应使用left join而不是inner join。上面假设有一个匹配项(或者您只想要有日期的行)。

关于mysql - 从另一个表中按字段排序查询结果(MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28646417/

10-11 19:34