簡體   English   中英

從另一個表中按字段排序查詢結果(MySQL)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM