获取列中具有连续数字的唯一ID列表

时间:2018-06-12 00:39:29

标签: mysql phpmyadmin

我不确定是否可以单独使用mysql查询来完成此操作,但我有一个表格格式如下:

+----+-----------+-----------------+-------+
| id | recipe_id |  ingredient_id  | order |
+----+-----------+-----------------+-------|
| 1  |     1     |       26        |   2   |
+----+-----------+-----------------+-------|
| 2  |     1     |       95        |   1   |
+----+-----------+-----------------+-------|
| 3  |     1     |       42        |   3   |
+----+-----------+-----------------+-------|
| 4  |     2     |       22        |   1   |
+----+-----------+-----------------+-------|
| 5  |     2     |       15        |   2   |
+----+-----------+-----------------+-------|
| 6  |     2     |       1         |   3   |
+----+-----------+-----------------+-------|
| 7  |     3     |       95        |   1   |
+----+-----------+-----------------+-------|
| 8  |     3     |       33        |   2   |
+----+-----------+-----------------+-------|
| 9  |     3     |       23        |   3   |
+----+-----------+-----------------+-------|

我想生成一个包含连续recipe_id个数字的所有order的列表。例如:1,2,3等等,(例如recipe_id 2)但是如果它们不是,例如,recipe_id 1有2,1,3,所以它不按顺序排列。

我使用的是php,但我想先知道是否可以单独使用mysql。

1 个答案:

答案 0 :(得分:1)

您可以使用此功能获取订单号不会增加ID

的所有配方
SELECT * FROM mytable AS a, mytable AS b 
WHERE ((a.id < b.id AND a.order > b.order) OR (a.id > b.id AND a.order < b.order)) AND a.recipe_id = b.recipe_id

这一个可以将订单作为一行获得所有食谱

SELECT recipe_id, MAX(`order`)-MIN(`order`)+1=COUNT(`order`), GROUP_CONCAT(`order`) 
FROM mytable GROUP BY recipe_id

它只是一个开始,但我希望它会帮助你

我创建了一个小提琴https://www.db-fiddle.com/f/dakAHH5YXt3o1rahXFznLy/0