2011-07-15 4 views
1

私はテーブルを照会しようとしていますので、Studentのカラム "status"が 'active'の場合は と呼び、前のレコードから「firstName」と「lastName」coloumnsを選択してください。各レコードには主キーがあります。 つまり、recordのstatusカラムがactiveの場合、previosレコードを選択します。 テーブルは既にこのデータについてはSQLは前のレコードを選択します

id firstname lastname status   email 
9 Joe   Peters  inactive  [email protected] 
10 kim   Rol   active   [email protected] 
11 Lance  Ree   inactive  lll&hh.com 
12 diana  Jones  active   [email protected] 

のようなデータが移入され、私はこれを行うことができますどのように REEジョー・ピーターズを返す必要がありますクエリとランス? ありがとう

+0

「SQL」に「以前のレコード」はありません。前の順? – Quassnoi

+0

あなたはより高いレベルで何をしたいか説明できますか?たぶん簡単な方法がありますか? – Jacob

+0

あなたが探しているものを見ることができるように、テーブルにデータを引き出すことができれば役に立ちます。 statusカラム= 'active'の場合、前の行を選択することを実際に意味する場合は、設計に重大な誤りがある可能性があります。 –

答えて

1

あなたは、単に生徒がactiveある記録から名前を選択したい場合は、クエリは、単純な

SELECT id, firstname, lastname 
FROM students 
WHERE status = "active" 

である私はあなたがは、あなたが行である前の行で何を意味するかと仮定ちょうど活発な学生だったと決定した。このクエリでは、あなたのテーブルにアクティブな生徒がいるかどうかチェックし、名前を取得します。名前はほとんど一意ではないので、私はID列を含めました。 ステータス列を0または1の整数に設定することもお勧めします。

あなたが本当に前の行を選択したい場合は、ポイントは、あなたが持っている行と、選択したい行の間の関係を決定している

SELECT sj.id, sj.firstname, sj.lastname 
FROM students AS s 
LEFT JOIN students AS sj ON (sj.id = s.id - 1) 
WHERE s.status = "active" 

を使用することができます。この場合、現在の行より小さいID 1を持つ行を選択します。この制約は非常に制限的なので、この方法で行を選択することはお勧めできません。データベースを再設計することもできます。

+0

また、あなたの活発な学生はKim RolとDiana Jonesです。 Joe PetersとLance Reeが 'status =" inactive "を設定したい場合は、' – Naltharial

+0

ありがとうございます。これは単なる例であり、可能かどうかを知りたい/現在のレコードに基づいて以前のレコードを選択する簡単な方法がある場合 – jpo

+0

あなたの情報で回答を更新しました。 – Naltharial

0

前回のレコードでは、おそらく最初に挿入されたものです。その行をlast_insert_id()(これは最後に挿入された自動インクリメント値を返すmysql関数)を使って参照できます。

select * from T where id = last_insert_id(); 
関連する問題