0

私はMySQLにかなり慣れていません。この問題があり、ヘルプを検索しましたが、答えが見つかりませんでした(おそらく、何を検索すればよいかわからないためです)。簡単な解決策があると確信しています。

次のような単純な MySQL テーブルがあります。

id   |   referenceid   |   status
40       104702            4
39       104720            2
38       104720            0
37       104719            2
36       104719            0
35       104702            2
34       104702            0
41       104719            5

次の出力を生成する配列をフェッチしたい:

一意の「referenceid」フィールドごとに、最も高い「ID」(つまり最新のもの) とその「ステータス」を知りたいです。

だから私はこのクエリを試しました:

$result = mysql_query(
  "SELECT status,id,referenceid 
   FROM image_status_tracking 
   GROUP BY referenceid",$db);

while ($row = mysql_fetch_array($result)) {
  $id = $row['id'];
  $status = $row['status'];
  $referenceid = $row['referenceid'];
  echo "ID $id, REFID $referenceid, Status $status <br />";
}

次の出力が得られます。

ID 40, REFID 104702, Status 4

ID 37, REFID 104719, Status 2

ID 39, REFID 104720, Status 2 

しかし、これは私が望んでいた結果ではありません。referenceid 104719 の ID とステータスは、37 と 2 ではなく、41 と 5 である必要があります。

各参照 ID の最新の ID 行出力を取得する方法がわかりません。

私が気付いたのは、PHPMYADMIN で (上記の表で確認できます)、ID が逆の順序でリストされており、最新の ID が一番下にあるということです。それがこの問題に関連しているかどうかはわかりません。

これが明確であることを願っています。それは簡単なことだと確信しています。

読んでくれてありがとう。

ジェームズ

4

3 に答える 3

4

メモリから入力するため、構文を少し修正する必要があるかもしれませんが、コンセプトはうまくいくはずです。

select * 
  from image_status_tracking 
 where id in (
              select max(id) from image_status_tracking 
              GROUP BY referenceid
             )
于 2012-10-01T20:54:03.690 に答える
1

これを試して...

 SELECT MAX(ID), Status From image_status_tracking 
       GROUP BY referenceid
于 2012-10-01T21:05:25.497 に答える
1

あなたのクエリは、あなたがしたいことをしません。各参照 ID に対して、ランダムな ID とステータスを選択しています。これは、隠し列と呼ばれる MySQL の (誤った) 機能です。

あなたが望むのはもっと似ています:

select ist.*
from image_status_tracking ist join
     (SELECT referenceid, max(id) as maxid
      FROM image_status_tracking 
      GROUP BY referenceid
    ) r
    on ist.referenceid = r.referenceid
于 2012-10-01T20:57:26.903 に答える