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

Limit=0 (DateTime DESC 順) まで、SecondaryID=9 と TertiaryID=4 の両方を持つレコードを取得しようとしています。

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 に答える