代码之家  ›  专栏  ›  技术社区  ›  Stark

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

  •  2
  • Stark  · 技术社区  · 6 年前

    我不确定是否可以单独使用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等等,(例如,配方2),但是如果它们不是,例如,配方1有2、1、3,所以顺序不对。

    我使用的是PHP,但我想先了解一下单独使用MySQL是否可行。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Marcus    6 年前

    您可以使用此项获取订单号不随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