php - 在 MySQL 记录中生成一个范围

标签 php mysql

我之前通读过其他类似的问题,但似乎没有人回答我的问题。如果这是对其他事情的重复,我深表歉意,但我似乎无法在其他地方找到这个问题的答案。

我有一个看起来或多或少像这样的数据库表:

编号 |网址 |标题 |剧集 |顺序 |创建于 |修改_at

这些用于将特定链接分配给播客剧集,它们按照 Sequence 所示的顺序显示。我已经构建了一个与表交互的 Laravel 框架,并且我能够通过操纵序列来更改事物的顺序,但是我在移除事物和维护序列以达到我想要的目的时遇到了麻烦。假设我在表中有以下四项内容:

id = 5, sequence = 1
id = 6, sequence = 3
id = 7, sequence = 2
id = 8, sequence = 4

当查看网站时,页面将按 id 5、7、6、8 的顺序列出它们。但是,如果我发现其中一个链接有问题,我会删除它,此时我可能会得到 id 5、7、8。序列将是 1、2、4。

我目前正在寻找一种在每集基础上“重新播种”序列列的方法。它基本上会获取具有特定 episode 的所有行,在 sequence 上按升序对它们进行排序,然后按升序“重新编号”。序列 = 1, 2, 4, 5, 7, 8, 9 将变为 1, 2, 3, 4, 5, 6, 7。

最佳答案

应该是比较简单的查询比如

select
      YT.*
   from
      YourTable YT
   where
      YT.Episode = 'MO50'
   order by
      YT.Sequence

现在,如果您的序列由于任何原因而产生间隙,您总是可以实现一个 mySql 变量来递增,而不管实际序列是什么。尝试..

select
      @tmpRow := @tmpRow +1 as NewSequence,
      YT.*
   from
      YourTable YT,
      ( select @tmpRow := 0 ) sqlvars
   where
      YT.Episode = 'MO50'
   order by
      YT.Sequence

因此,即使给定节目“MO50”的实际序列是 2、3、8、12、15。实际列“NewSequence”将显示为 1、2、3、4、5。

现在,就是说,您仍将拥有原始的“ID”列作为编辑任何细节和/或根据需要删除剧集的基础……这对您有帮助吗?

关于php - 在 MySQL 记录中生成一个范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36388799/

相关文章:

php - *.php 文件上的 Adob​​e Air Javascript

php - 将多维数组的值转换为一维数组中的键值对,同时从其中一个值中取出前缀?

php - Laravel 删除和更新

c# - Azure Web 应用程序 CodeFirst 错误

php - Laravel 查询左连接

php - 如何在jquery中获取PHP $_SESSION数组的值?

php - 关于实时搜索领域的安全问题

php - 数据将以哪个字符集存储在数据库中

php - drupal如何连接数据库

mysql - 以表名和ID号为参数的MySQL delete-from-table-by-id存储过程