我不确定是否可以单独使用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。
答案 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