0

どのユーザーがどのニュースレターを購読しているかを確認できる MySQL データベース テーブルがあります。次のようになります。

ID  Klant_ID Mail_ID Status Datum
2   6        1       test   test
72  6        1       10     20-03-2013
73  6        2       90     20-03-2013
74  6        4       10     20-03-2013
75  6        5       90     20-03-2013
76  8        1       10     20-03-2013
77  8        2       10     20-03-2013
78  8        4       90     20-03-2013
79  8        5       90     20-03-2013
80  6        2       90     21-03-2013
81  6        4       10     21-03-2013

現在、この SQL クエリを使用して、正しい Klant_ID を持つすべての行を選択しています。

"SELECT * FROM Subscriptions WHERE Klant_ID = '".$_GET["ID"]."'";

これは次のように表示されます。

ここに画像の説明を入力

別の Mail_ID を持つ行と最後の行のみを表示するクエリを取得しようとしています。基本的に、この出力を表示するクエリが必要です。

ID Klant_ID Mail_ID Status Datum
72 6        1       10     20-03-2013
80 6        2       90     21-03-2013
81 6        4       10     21-03-2013
65 6        5       90     20-03-2013

DISTINCT を使用していくつか試してみましたが、これについてあまり経験がないため、適切に機能させることができません。さらに質問がある場合は、コメントで質問してください。どんな助けでも素晴らしいでしょう!

4

4 に答える 4

1

これはこれを行う必要があります。これは、DBMS によって異なります。

SELECT MAX(ID), Mail_ID FROM Subscriptions
    WHERE Klant_ID = '".$_GET["ID"]."' GROUP BY Mail_ID

次に、適切なIDを取得し、さらに残りの情報を取得できます

SELECT * FROM Subscriptions,
    (SELECT MAX(ID) as ids, Mail_ID FROM Subscriptions
        WHERE Klant_ID = '".$_GET["ID"]."' GROUP BY Mail_ID) table2
    WHERE ID=table2.ids
于 2013-03-21T10:10:06.407 に答える
0

これをお試し下さい

select * from Subscriptions where ID in (Select MAX(ID) from Subscriptions sub WHERE Klant_ID = '".$_GET["ID"]."' group by Mail_ID)

于 2013-03-21T10:19:51.077 に答える
0

DBMS を指定しなかったため、これは ANSI SQL です。

select id, 
       klant_id,
       mail_id, 
       status,
       datum
from (
  select id, 
         klant_id,
         mail_id, 
         status,
         datum,
         max(datum) over (partition by mail_id) as max_datum
   from Subscriptions 
   where Klant_ID = 42 --- pass your parameter here
) t
where datum = max_datum;
于 2013-03-21T10:12:11.760 に答える
0

Distinct では、クエリから返されるすべてのデータに応じて個別の行が得られるため、必要な結果が得られません。日付とステータスが異なる同じニュースレターを複数購読することができるため、クエリをもう少し変更する必要があるため、Status と Datum で集計し、Mail_ID でグループ化すると役立つと思います。

"SELECT
        MAX(ID), Klant_ID, Mail_ID, MAX(Status), MAX(Datum)
    FROM Subscriptions
    WHERE Klant_ID = '".$_GET["ID"]."'
    GROUP BY Mail_ID";

さらに 2 つのこととして、Status 列と Datum 列に異なるタイプのデータを保持します。データベースがより複雑になると、これは苦痛になる可能性があり、SQL クエリ文字列を Http-Get-Data で連結するだけで、テストには問題ないと感じるかもしれません。ユーザー データをチェックせずにデータベースに渡すだけではいけません。

于 2013-03-21T10:25:32.617 に答える