MySQL 4.1.xを使用しています。
disbursement テーブル(出金)
d_id│amout│timestamp
────────────────
1 │ 1000│2009-11-01 11:05:01
2 │ 500│2009-11-01 16:15:02
3 │ 1100│2009-11-03 11:33:28
credit テーブル(入金)
c_id│amout│timestamp
────────────────
1 │ 1000│2009-10-05 10:50:21
2 │ 200│2009-10-31 17:12:42
3 │ 800│2009-11-01 08:14:12
4 │ 1300│2009-11-02 13:43:71
このように、入金テーブルと出金テーブルが別で管理されています。
これをJOINして、時間順に並べたいのですが、
時間のフィールドが別々になってしまうため、
JOIN後、どのようにORDER文を書けばいいのか分かりません。
詳しい方、よろしくお願いいたします。
欲しい結果のイメージ
入金 │ 出金 │ 時間(これで並び替え)
────────────────
1000 │ │ 2009-10-05 10:50:21
200 │ │ 2009-10-31 17:12:42
800 │ │ 2009-11-01 08:14:12
│ 1000│ 2009-11-01 11:05:01
│ 500│ 2009-11-01 16:15:02
1300 │ │ 2009-11-02 13:43:71
│ 1100│ 2009-11-03 11:33:28
未確認ですが、こんな感じでどうでしょうか。
select * from ( select amout as 入金, 0 as 出金, timestamp as 時間 from credit union all select 0 as 入金, amout as 出金, timestamp as 時間 from disbursement ) tbl order by 時間
または、文字列として・・・
select * from ( select cast(amout as char) as 入金, '' as 出金, timestamp as 時間 from credit union all select '' as 入金, cast(amout as char) as 出金, timestamp as 時間 from disbursement ) tbl order by 時間
inner join でぐぐって見てください。
きっと、希望に合う答えが見つかります。
ええと(汗
JOINは、分かるんですよ。
結合した後のソートです。
別々のテーブルに時間のフィールドがあって、それを元にソートしたいのです。
普通にJOINすると、
disbursementテーブルとcreditテーブルのtimestampフィールドが出てきちゃうので、
どちらかでしかソートできないと思います。
未確認ですが、こんな感じでどうでしょうか。
select * from ( select amout as 入金, 0 as 出金, timestamp as 時間 from credit union all select 0 as 入金, amout as 出金, timestamp as 時間 from disbursement ) tbl order by 時間
または、文字列として・・・
select * from ( select cast(amout as char) as 入金, '' as 出金, timestamp as 時間 from credit union all select '' as 入金, cast(amout as char) as 出金, timestamp as 時間 from disbursement ) tbl order by 時間
ありがとうございます!!
そうですね、UNIONでした。
うまく行きました。
んー、その例を見る限り必要なのは JOIN じゃなくて UNION の様に見えるが。
select d_amount AS 入金, c_amount AS 出金, times AS 時間 FROM ( SELECT amount AS d_amount, NULL AS c_amount, timestamp AS times FROM disbursement UNION SELECT NULL AS d_amount, amount AS c_amount, timestamp AS times ) AS c_d ORDER BY 時間
JOIN するキーがわからんのよね。
SELECT d.amount AS 入金, c.amount AS 出金, IFNULL(d.timestamp,c,timestamp) AS 時間 FROM disbursement AS d CROSS JOIN credit as c ORDER BY 時間
こんなんか?
ありがとうございます!!
JOIN、JOINと思っていたのは、
本当は、会員情報やら、なんやらかんやら、JOINしたあとの結果テーブルから、
さらに、合体!という感じだったので、JOINと書いてしまいました。
ほんと、UNIONです(汗
タバコすって、コーヒー飲んで、落ち着いてから、作業します m(_ _)m
ありがとうございます!!
そうですね、UNIONでした。
うまく行きました。