MySQL/MySQLi从表中选择,直到找到给定值

问题描述:

我已经在此搜索了很长时间,似乎无法找到对我有用的东西,因为每个类似的问题都与达到某一列的总和有关。MySQL/MySQLi从表中选择,直到找到给定值

我正在寻找一种方法来搜索表中所有具有多个常用列值的记录 - 它们不是表中的连续记录,但它们必须是连续记录,因为常用值是因式分解的 - 并且检索所有记录,直到一个特定列具有不同的值。

鉴于数据:

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,直到极限= 0(按日期时间降序排列)。

使用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中循环 - 目前有数百个结果(并且每周都在增长),但在生产中运行速度太慢。

我也很乐意接受MySQLi的特定解决方案,因为我们即将进行到MySQLi而不是MySQL的过渡。

我意识到,我一直在进行有关该查询的错误的方式。

而不是从数据中的给定点开始“向后计数”,以查看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 

查询将被

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

据测试,工作

+0

很抱歉,但不会给结果集,我需要。对于PrimaryID = 12,它也将返回具有PrimaryID 3&2的行,这些行不应该在我需要的结果集中,因为具有PrimaryID = 6的行具有Limit = 0。 – 2013-03-24 21:42:43

+0

@winterblood您能详细说明您需要什么吗?我很困惑.. – 2013-03-25 02:00:43

+0

我需要查询检索所有记录(匹配SecondaryID和TertiaryID)从一个记录回溯到一个记录存在,其中Limit = 0。本质上,我正在使用查询来确定Limit字段在什么时间从0更改为1,以确定当前活动状态何时开始。 – 2013-03-25 02:19:41