我有一个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/28647406/