【问题标题】:Select next 6 Rows if col1="searchterm"如果 col1="searchterm" 则选择下 6 行
【发布时间】:2013-06-05 22:03:24
【问题描述】:

我的表格(以“AA”开头的行仅包含公司代码和名称。第一个喜欢下面的接下来的 4 行包含该公司的详细信息,之后 4 行再次包含公司名称的行...等等)

id  col1           col2                      col4 | col5 | col6  | col7 | col8
 1  AAV987        Alcatop Pvt                     |      |       |      |
 2  126B          Burger                       10 |  --  |  15   |  20  |   56 
 3  957A          Pizza                        17 |  19  |  44   |  29  |   97
 4  45A5          Mushroom                     59 |  22  |  15   |  --  |   --
 5  8999          Fish                         27 |  39  |  --   |  20  |   20  
 1  AA5697        Nomendus Curies
 2  126B          Burger                       42 |  26  |  25   |  29  |   60 
 3  957A          Pizza                        65 |  65  |  90   |  29  |    9
 4  45A5          Mushroom                     15 |  97  |  --   |  64  |   65
 5  8999          Fish                          7 |  19  |  15   |  --  |   20   

我需要这个

我需要一个查询来帮助我这样做

如果搜索词是“AA5697”,那么它应该会得到如下数据

id  col1           col2                      col4 | col5 | col6  | col7 | col8
 1  AA5697        Nomendus Curies
 2  126B          Burger                       42 |  26  |  25   |  29  |   60 
 3  957A          Pizza                        65 |  65  |  90   |  29  |    9
 4  45A5          Mushroom                     15 |  97  |  --   |  64  |   65
 5  8999          Fish                          7 |  19  |  15   |  --  |   20  

类似问题1:Mysql Select Next & Prev row not order by id

类似问题2:sql pulling a row for next or previous row of a current row

我看着他们。但这让我感到困惑,并且第一个链接中的查询并不完美:(

【问题讨论】:

  • 你不应该认为记录是有序的。您应该使用两张表而不是那张。
  • 同意,这个数据库设计真的很垃圾,对不起,无意冒犯。了解数据库规范化...
  • 在两个表之间建立父子关系。将所有记录放在一个表中的目的是什么?
  • @gkovacs90 感谢您的评论。是的,这是主要问题。他们没有被订购。但只是一个示例数据,我有大量相同形式的数据

标签: mysql


【解决方案1】:

如果提供的列是所有列,则无法正确解决此问题。在关系数据库中,表是一组无序的行。当然,硬盘上是有物理顺序的,但逻辑上你不能假设它们有任何顺序。没有“下一个”行。

您可以尝试通过各种查询、更改表等来解决此问题...您可能很幸运,但没有可证明的有效解决方案。

这是一个糟糕的数据库模型。甚至没有证据证明这些值是正确的。请为您发送此文件的人发送一个真实的数据库。公司和数据行之间的父子连接将使这个问题变得更容易。

但是:如果存在整数递增的隐藏 ID 字段(在示例代码中没有),您可以使用它来定义查询中的顺序。这样,您可以通过检查价值记录的 ID 与所选公司 ID 的距离来轻松解决问题。

注意:没有证据表明如果没有,您可以添加正确的 ID 列。如果有,而不是查询,您应该使用它来定义另外 2 个表并用数据填充它们。

编辑:

不接受答案并编辑帖子不是一个好习惯。您提供了 2 个链接。在第一个中,记录按名称排序,在第二个中,它们按日期排序。

您的新 ID 字段几乎没有问题,但如果您有 N 记录,则 ID 应该从 1 到 N

【讨论】:

  • 很抱歉,但我认为可以这样做,请查看我在底部添加的类似问题链接..拜托!
  • @user2457175 呃,不,gkovacs90 是绝对正确的。数据库设计是垃圾,数据是垃圾,基于这种设计你尝试的任何东西都是垃圾。很抱歉这么说,但真相有时会让人受伤。
【解决方案2】:
  1. 请把你的问题说清楚一点。 (这个例子令人困惑。)
  2. 从我收集到的应该是
     SELECT col1, col2, col3, col4, col5, col6, col7, col8 from MY_TABLE LIMIT 7 ORDER BY col1;

【讨论】:

  • 感谢您的回复。它不起作用:(是否可以创建一个新列并将公司代码复制到接下来的 6 行。
  • 我真的很困惑你想在这里做什么。因此,您应该澄清问题,以便其他可能遇到类似问题的人轻松解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多