加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:48:07 所属栏目:PHP教程 来源:网络整理
导读:我已经搜索了很长一段时间,似乎无法找到适合我的东西,因为每个类似的问题都是关于达到一列的某个总和. 我正在寻找一种方法来搜索一个表中的记录,这些记录都具有许多常见的列值 – 它们不是表中的连续记录,但它们必须是连续的记录,当公共值被考虑在内时 – 并
我已经搜索了很长一段时间,似乎无法找到适合我的东西,因为每个类似的问题都是关于达到一列的某个总和.

我正在寻找一种方法来搜索一个表中的记录,这些记录都具有许多常见的列值 – 它们不是表中的连续记录,但它们必须是连续的记录,当公共值被考虑在内时 – 并检索所有记录,直到一个特定列具有不同的值.

鉴于数据:

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中循环它 – 并且目前有数百个结果(并且每周都在增长),它在生产中工作太慢了.

我也很乐意接受MySQLi特定的解决方案,因为我们即将转换到MySQLi而不是MySQL.

解决方法

我意识到我一直在以错误的方式处理这个查询.

而不是从数据中的给定点“向后计数”以查看限制首次变为= 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读