![](/img/trans.png)
[英]UPDATE first column with min value LIMIT 1 with INNER JOIN, in PHP
[英]MySQL MIN() limit by column
我有一個MySQL表格,其格式如下:
group_clue:
---------------------------------------------------
| id | group_id | clue_id | completed | run_order |
---------------------------------------------------
| 1 | 1 | 2 | 1 | 1 |
| 2 | 1 | 6 | 1 | 2 |
| 3 | 1 | 4 | 1 | 3 |
| 4 | 1 | 3 | 0 | 4 |
| 5 | 1 | 1 | 0 | 5 |
| 6 | 1 | 5 | 0 | 6 |
| 7 | 2 | 9 | 1 | 1 |
| 8 | 2 | 2 | 0 | 2 |
...
---------------------------------------------------
在上面的數據group_clue
被構造成使得每個group_id
具有每clue_id
在一些run_order
(范圍從1到的數量clue_id
s且不重復特定組)。
第一個問題
我想創建示出了第一表clue_id
每個group_id
其中completed = 0
時由有序run_order
(別名為current_clue
)。 使用上面的示例,將得出:
---------------------------
| group_id | current_clue |
---------------------------
| 1 | 3 |
| 2 | 2 |
---------------------------
我的初步嘗試是:
SELECT group_id, MIN(clue_id) as current_clue
FROM group_clue
WHERE completed = 0
GROUP BY group_id
然而,這種返回相同clue_id
每個group_id
。
第二個問題
根據第一個問題中的數據,我想組成一個最終表,在這些表中,我GROUP_CONCAT()這些結果將包含每個current_clue
和每個包含該current_clue
group_id
。 我也希望它按從group_ids
最多的group_ids
到最少的線索排序。 結果表的示例為:
--------------------
| clue | group_ids |
--------------------
| 3 | 1,5,4,3 |
| 2 | 2,6 |
--------------------
我無法弄清楚順序。 我的初步嘗試是:
SELECT clue_id, GROUP_CONCAT(group_id)
FROM [resulting_table]
GROUP BY clue_id
ORDER BY [something]
感謝您提供任何幫助:哪種查詢適合這種情況?
您問題的第一部分可以通過這種方式解決(它希望每個組的run_order
是唯一的):
SELECT t1.group_id,
t1.clue_id AS current_clue
FROM group_clue t1
INNER JOIN (SELECT group_id,
MIN(run_order) as run_order
FROM group_clue
WHERE completed = 0
GROUP BY group_id) t2 USING (group_id, run_order)
該查詢的邏輯非常簡單:
group_id
和相應最小值run_order
其具有completed = 0
。 clue_id
。 您可以使用以下方式按每組元素的數量排序
ORDER BY COUNT(*) DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.