![](/img/trans.png)
[英]Need MySql query that should return result by ordering values in particular field
[英]Ordering query result by field from a different table (MySQL)
我有一個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
表中可能不存在匹配werte
,則應使用left join
而不是inner join
。 上面假設有一個匹配項(或者您只想要有日期的行)。
如果您想避免重復,可以在以下日期使用分組依據:
SELECT f.id, STR_TO_DATE(w.werte, '%d.%m.%Y') as d
FROM folders f JOIN werte w
ON w.folder_id = f.id
GROUP BY d
ORDER BY d;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.