2016-09-15 29 views
6
でテーブルの最後の2つのレコードを取得

I持つ3つのMySQLのテーブル私は結果が欲しい(オーダー、キャンプ、利用者)として怒鳴る値、MySQLは3つのテーブル

order_table 
ID camp_id  orderDate  message 
1  1   2015-01-01  ok 
2  1   2015-02-01  ok 
3  2   2015-03-01  not ok 
4  3   2015-01-01  not ok 
5  1   2015-04-01  not ok 
6  2   2015-01-01  ok 
7  3   2015-07-01  not ok 

camp_table 
camp_id camp_uid  camp name 
1  10    first camp 
2  11    second camp 
3  12    third camp 
4  10    forth camp 

user_table 
uid uname 
10  abc 
11  xyz 
12  wrt 

怒鳴る

uname,camp name,message 

として

orderDateでによって今日ためためORDER_TABLEから各ユーザーの最後の2つのレコードに私は参加したいですSEテーブルは電子メッセージ camp_table からとORDER_TABLEからuser_tableキャンプの南からのunameを持っています。 今日ため orderDateですることによりおかげ

+0

詳細を編集して説明してください。 – FluxCoder

+0

あなたは注文書の最後の2つのレコードを持ちたいと思っています。 –

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-クエリ – Strawberry

答えて

2
SELECT 
    u.uname, 
    ct.camp_name, 
    ot.message 
FROM 
    (
     SELECT 
      * 
     FROM 
      order_table o1 
     WHERE 
      (
       SELECT 
        COUNT(*) 
       FROM 
        order_table o2 
       WHERE 
        o1.camp_id = o2.camp_id 
       AND o2.ID >= o1.ID 
      ) <= 2 
    ) ot 
INNER JOIN camp_table ct ON ct.camp_id = ot.camp_id 
INNER JOIN user_table u ON ct.camp_uid = u.uid 
ORDER BY 
    u.uname 
+0

こんにちは、これは無限のクエリで、mysqlは –

+0

を貼り付けました。 –

+0

はい@ShoyebSheikh、私の場合はあなたのクエリも動作します –

-3
ため

"select uname, camp name, message from (order join camp on order.camp_id = camp.camp_id) join user on and camp.camp_uid = user.uid order by order.orderdate desc limit 2" 

はそれが役に立てば幸い、次のSQLクエリを使用します。

+0

テーブルをリンクする場所の代わりにjoinを使用する –

+0

はい!そのとおり。私はちょうどそれを行う気の単純な方法を言及しました –

+0

"まあ単純な方法"は、あなたが知るために、もはや使用されていない非常に昔ながらのものです:) –

3
Select 
ct.camp_name, 
ut.uname, 
ot.message FROM order_table as ot 
LEFT JOIN camp_table as ct on ot.camp_id = ct.camp_id 
LEFT JOIN user_table as ut on ct.camp_uid = ut.uid 
order by ot.id desc 
limit 2 
+0

私は欲しいものではない、各顧客の2つのレコードが今日の日付です。これは最後のレコードが2つしか表示されていません –

1

日付順と両方のテーブルを結合します。

Select t1.camp_name, t2.uname,t3.message FROM order_table as t3 
    LEFT JOIN camp_table as t1 on t3.camp_id = t1.camp_id 
    LEFT JOIN user_table as t2 on t1.camp_uid = t2.uid 
    order by t3.orderDate desc 
    limit 2 
関連する問題