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
据测试,工作
很抱歉,但不会给结果集,我需要。对于PrimaryID = 12,它也将返回具有PrimaryID 3&2的行,这些行不应该在我需要的结果集中,因为具有PrimaryID = 6的行具有Limit = 0。 – 2013-03-24 21:42:43
@winterblood您能详细说明您需要什么吗?我很困惑.. – 2013-03-25 02:00:43
我需要查询检索所有记录(匹配SecondaryID和TertiaryID)从一个记录回溯到一个记录存在,其中Limit = 0。本质上,我正在使用查询来确定Limit字段在什么时间从0更改为1,以确定当前活动状态何时开始。 – 2013-03-25 02:19:41