4

我已经搜索了很长时间,但似乎找不到适合我的东西,因为每个类似的问题都是关于达到某一列的总和。

我正在寻找一种方法来搜索表中所有具有多个公共列值的记录 - 它们不是表中的连续记录,但当考虑到公共值时它们必须是连续记录 - 并检索所有记录直到一个特定的列具有不同的值。

给定数据:

PrimaryID   SecondaryID   TertiaryID   Limit       DateTime
   12            9             4           1       2013-03-22 00:00:14
   11            9             4           1       2013-03-22 00:00:13
   10           54            11           0       2013-03-22 00:00:12
    9            9             4           1       2013-03-22 00:00:11
    8            9            23           1       2013-03-22 00:00:10
    7            9             4           1       2013-03-22 00:00:09
    6            9             4           0       2013-03-22 00:00:08
    5            9            16           0       2013-03-22 00:00:07
    4           72            32           0       2013-03-22 00:00:06
    3            9             4           1       2013-03-22 00:00:05
    2            9             4           1       2013-03-22 00:00:04
    1            9             4           0       2013-03-22 00:00:03

我正在尝试检索具有 SecondaryID=9 和 TertiaryID=4 的记录,直到 Limit=0(按 DateTime DESC 排序)。

使用 PrimaryID 12 作为起点,我希望得到以下结果:

PrimaryID   SecondaryID   TertiaryID   Limit       DateTime
   12            9             4           1       2013-03-22 00:00:14
   11            9             4           1       2013-03-22 00:00:13
    9            9             4           1       2013-03-22 00:00:11
    7            9             4           1       2013-03-22 00:00:09

并以 PrimaryID 3 为起点:

PrimaryID   SecondaryID   TertiaryID   Limit       DateTime
    3            9             4           1       2013-03-22 00:00:05
    2            9             4           1       2013-03-22 00:00:04

目前我正在检索 SecondaryID=9 和 TertiaryID=4 的每个结果,然后在 PHP 中对其进行循环 - 目前有数百个结果(并且每周都在增长),在生产中工作太慢了。

4

2 回答 2

1

我意识到我一直在以错误的方式进行此查询。

而不是从数据中的给定点“向后计数”以查看 Limit 何时首次按顺序变为 =1,而是需要查找上一次出现的 Limit=0,然后向前查询直到我的初始 PrimaryID。

涵盖我需要的所有内容的结果查询是

SELECT * FROM table1 WHERE SecondaryID='9' AND TertiaryID='4' AND `Limit`='1' AND PrimaryID<='3' AND `DateTime`>= (SELECT `DateTime` FROM table1 WHERE SecondaryID='9' AND TertiaryID='4' AND `Limit`='0' AND PrimaryID<='3' ORDER BY `DateTime` DESC LIMIT 1) ORDER BY `DateTime` DESC
于 2013-03-25T12:53:59.147 回答
0

查询将是

SELECT * FROM table_name 
WHERE PrimaryID <= 12(your_id) AND SecondaryID=9 and TertiaryID=4 AND Limit=1 
ORDER BY DateTime DESC

它已经过测试并且可以正常工作

于 2013-03-22T05:13:48.417 回答