我在使用需要一些「複雜」排序的Mysql查詢時遇到問題。 我有2個表:使用MySQL查詢執行復雜排序
Training
+--------------+------------------+
| training_id | training_name |
+--------------+------------------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
+--------------+------------------+
Training_venue
+----------+--------------+------------+
| venue_id | training_id | venue_date |
+----------+--------------+------------+
| 1 | 2 | 2009-06-01 |
| 2 | 2 | 2012-06-01 |
| 3 | 2 | 2011-06-01 |
| 4 | 1 | 2009-09-01 |
| 5 | 1 | 2011-09-01 |
| 6 | 1 | 2012-09-01 |
| 7 | 3 | 2009-01-01 |
+----------+--------------+------------+
而且我期待的結果如下:
+--------------+------------------+------------+--------------+
| training_id | training_name | venue_id | venue_date |
+--------------+------------------+------------+--------------+
| 2 | test2 | 2 | 2011-06-01 |
| 2 | test2 | 3 | 2012-06-01 |
| 1 | test1 | 6 | 2011-09-01 |
| 1 | test1 | 5 | 2012-09-01 |
+--------------+------------------+------------+--------------+
正如你所看到的,結果要求是:
- 沒有一個培訓未來的場地被丟棄。
- 過期的場地被丟棄
- 的培訓是「組合」在一起
- 的培訓與最快的場地是先用「最新最快的場地」訓練是最後
- 裏面的訓練,比賽場館是從最早到最晚訂購。
什麼mysql查詢將返回結果集?
編輯: 這是我到目前爲止已經試過:
SELECT *
FROM `training` AS t
LEFT JOIN `training_venue` AS v USING (`training_id`)
WHERE `venue_date` >= NOW()
ORDER BY `training_id;
但是如果training_id順序照顧保持所有訓練的「組合」在一起,它不容許下令從訓練訓練最快的場地進行最新的場地訓練。
我也編輯了數據表來說明有問題。看看結果如何排序,這不是通過training_id,而是通過最快的場地。
編輯: 更正日期。
也許你可以告訴我們你到目前爲止設法提出的查詢是什麼,所以我們可以幫助你完成它,而不是僅僅期望有人爲你做所有的工作。 – 2011-04-28 14:57:54
@AlanBarber你是對的,我剛剛編輯..希望它會有所幫助。 – FMaz008 2011-04-28 15:17:43