宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#2回答者です。



MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1
    • good
    • 5
この回答へのお礼

ありがとうございます。
初心者の私でも意味が良くわかる簡単な方法を伝授いただきまして!

もっと勉強しようと思います
今日はありがとうございました。

お礼日時:2007/01/27 03:10

MySQLのバージョンは、いくつですか?



一般的なSQLでは、以下のようなSQLを組みます。

select * from 表名
where 列名=(select max(列名) from 表名)
    • good
    • 2

AUTO_INCREMENTを使っているならば


LAST_INSERT_ID()
で取得できます
(LAST_INSERT_IDはMySQLの関数です

この回答への補足

スミマセン、どう使ってよいのか判りません。
*色々してみたのですが・。

$sql =" select * from テーブル where フィールド='max' " ;

これはどのように変更したらよいのでしょうか?
宜しくお願いいたします。

補足日時:2007/01/27 02:51
    • good
    • 2
この回答へのお礼

スミマセン、勉強不足で。
勉強しなおしてきます・・・。
ありがとうございました。

お礼日時:2007/01/27 03:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qauto_incrementフィールドの書込み内容を知る方法

auto_incrementの属性を持つフィールド(以後、id)を含むテーブルへ、書込みを行った場合、idフィールドには空番号が自動で付与されて書き込まれると思いますが、書き込まれた番号を効率的に知る方法はありますでしょうか。

例:id(auto_increment)、data1(char)のテーブルに対して、
data1に『AAA』をinsertした直後に、自動で付与されたid値を知りたい。

データをinsertした直後に最老番を調べる方法では、データのinsertが多数して行われた場合に、値がずれる恐れがあります。
宜しくお願い致します。

Aベストアンサー

>auto_incrementの属性を持つフィールド(以後、id)を含むテーブルへ、書込みを
>行った場合、idフィールドには空番号が自動で付与されて書き込まれる

「空番号」ではなく、「最大値+1」です。
例えば、ある表のauto_incerment列に
1、2、4、5、10
という値が格納されている場合、次に採番されるのは11です。3を再度、採番したいなら、auto_incrementを使うのでなく、自前で採番方法を作る必要があります。

>書き込まれた番号を効率的に知る方法

自分がそのセッションで書き込んだものなら、LAST_INSERT_ID()というMySQLの関数で得られます。他人が書き込んだものも含めてなら、
select max(列名) from 表名
で検索する必要があります。

Qテーブル結合で、結合フィールドをWHERE句に用いた時に、結合フィールドのデータがNULLになってしまう。

MySQL 4.0.24-standard + PHP Version 4.3.11 を使用しています。

下記のような table_a, table_b があり、idフィールドで外部結合させています。

table_a
id|value
-------
1 | 0
2 | 1

table_b
id|name
-------
1 | A
2 | B

SELECT * FROM table_a NATURAL LEFT OUTER JOIN table_b;

result
id|value|name
--------------
1 | 0 | A
2 | 1 | B

しかし、下記のクエリでは、このようにidがNULLになってしまいます。

SELECT * FROM table_a NATURAL LEFT OUTER JOIN table_b WHERE table_a.id = 1;

result
id |value|name
--------------
NULL| 0 | A

以下のような結果を得たいのですが、どうすれば良いのでしょうか?

result
id|value|name
--------------
1 | 0 | A

MySQL 4.0.24-standard + PHP Version 4.3.11 を使用しています。

下記のような table_a, table_b があり、idフィールドで外部結合させています。

table_a
id|value
-------
1 | 0
2 | 1

table_b
id|name
-------
1 | A
2 | B

SELECT * FROM table_a NATURAL LEFT OUTER JOIN table_b;

result
id|value|name
--------------
1 | 0 | A
2 | 1 | B

しかし、下記のクエリでは、このようにidがNULLになってしまいます。

SELECT * FROM table_a NATURAL LEFT OUTER JOIN table_b...続きを読む

Aベストアンサー

素直に。
select table_a.id,value,name from table_a left join table_b on table_a.id = table_b.id where table_a.id = 1;

Q【初歩】 主キー&ユニーク&AUTO_INCREMENTをつけたフィールドを作りたい

・WindowsXP(SP2)IIS5.1
・PHP 5.2.5 Win32
・MySQL 5.1.22 RC Win32
・phpMyAdmin 2.11.4

会社マスター(KAISYA)に管理番号、Eメール、氏名、備考、更新日時とあります。これらのうち、
・「管理番号」に、主キー、ユニーク制約、AUTO_INCREMENTを。
・「Eメール」に、主キー、ユニーク制約を
それぞれつけるにはどのようなSQL文を発行したらいいかご教示ください。

phpMyAdminで発行した下記のSQL文ですと、

CREATE TABLE IF NOT EXISTS `KAISYA` (
`KanriNo` int unsigned AUTO_INCREMENT COMMENT '管理番号',
`Email` varchar( 80 ) NOT NULL default '' COMMENT 'Eメール',
`Namae` varchar( 40 ) default NULL COMMENT '氏名',
`Bikou` text COMMENT '備考',
`UpdateDate` timestamp NOT NULL default '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時'
) ENGINE = InnoDB DEFAULT CHARSET = utf8

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
とエラーになってしまいます。
(このSQL例文には、主キー、ユニーク制約の件は未反映です)

`KanriNo` int ....の行を削除すればSQL は正常に実行されるのですが。

・WindowsXP(SP2)IIS5.1
・PHP 5.2.5 Win32
・MySQL 5.1.22 RC Win32
・phpMyAdmin 2.11.4

会社マスター(KAISYA)に管理番号、Eメール、氏名、備考、更新日時とあります。これらのうち、
・「管理番号」に、主キー、ユニーク制約、AUTO_INCREMENTを。
・「Eメール」に、主キー、ユニーク制約を
それぞれつけるにはどのようなSQL文を発行したらいいかご教示ください。

phpMyAdminで発行した下記のSQL文ですと、

CREATE TABLE IF NOT EXISTS `KAISYA` (
`KanriNo` int unsigned AUTO_INCREMENT COM...続きを読む

Aベストアンサー

主キー = ユニーク でもありますので、
主キー設定するのであれば、ユニークは必要ありません
また、同一table内で別々のプライマリキーを設定することはできませんので、KanriNoとEmailの組での複合キーとしなくてはなりません

クリエイト文一発で作るのであればこんな感じです

CREATE TABLE IF NOT EXISTS `kaisya` (
`KanriNo` int(10) unsigned NOT NULL AUTO_INCREMENT ,
`Email` varchar(80) NOT NULL DEFAULT '',
`Namae` varchar(40) DEFAULT NULL ,
`Bikou` text ,
`UpdateDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`KanriNo`,`Email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

主キー = ユニーク でもありますので、
主キー設定するのであれば、ユニークは必要ありません
また、同一table内で別々のプライマリキーを設定することはできませんので、KanriNoとEmailの組での複合キーとしなくてはなりません

クリエイト文一発で作るのであればこんな感じです

CREATE TABLE IF NOT EXISTS `kaisya` (
`KanriNo` int(10) unsigned NOT NULL AUTO_INCREMENT ,
`Email` varchar(80) NOT NULL DEFAULT '',
`Namae` varchar(40) DEFAULT NULL ,
`Bikou` text ,
`UpdateDate` ...続きを読む

QAUTO_INCREMENT を複数のテーブルに跨がす事って可能でしょうか?

PHP+MySQLで
AUTO_INCREMENTを使用してidを管理したいんですが
複数テーブル(test1,test2)に
同じ「tourokou_id」というカラムが あります。

両方のtourokou_idをAUTO_INCREMENTすると
test1
1 2 3 4  ・・・・・
test2
1 2 3 4  ・・・・・
となってしまいますよね。

これを
test1
1 3 4   ・・・・・
test2
2   5 ・・・・・
という風にしたいんですがどのようにすればいいんでしょうか?
そもそもできるんでしょうか?

Aベストアンサー

>そもそもできるんでしょうか?

test3をつくってidをauto_incrementで管理する
test1,test2にINSERTするさいには
INSERT INTO test3 (id) VALUES(NULL);
としてから
INSERT INTO t1 (id,data) VALUES(LAST_INSERT_ID(),"xxx");
とすればよいでしょう。

ちなみにオートインクリメントは連番で管理する仕組みではないので
こんなことする意味があるかどうか疑問

Q1テーブル内レコードの各フィールド値の差分チェック

お世話になります。

現在、1テーブル内をログテーブル用として利用しています。

JSPでフォームを作成して各フィールド値を、
Webサイト画面上から変更可能なつくりにしており、
複数あるいずれかのフィールドの値を1つ以上変更してから、
[保存]ボタンを押下した際に、
  ↓
その変更前のレコード1件と、
変更後のレコード1件を、
同じログ用テーブル内へフラグ(変更前:0、変更後:2)を
それぞれ変えて、
INSERT INTOでレコードを計2件追加しています。
(あわせて、追加時のタイムスタンプをセットするフィールドもあるので、
 どんどんレコードを追加可能な仕様です)

そこでご質問なのですが、
この2つのレコードのみを比較して、
値が異なるフィールド名のみを、
(ときには複数フィールドにおいて値が異なるケースも有ります)
SELECTなどで表示させるようなSQL文の
作り方をご存じの方がいらっしゃいましたら、
ぜひ教えてください。

なぜこのようなご質問をさせていただいたかと申しますと、
ログテーブル内の上記した2件のレコードを比較して、
どこのフィールドの値が変更されたか?
を確認する際に利用したい為です。
(確認時には、phpMyAdminツールなどで直接SQL文をたたいて実行予定です)

以上、宜しくお願い致します。

お世話になります。

現在、1テーブル内をログテーブル用として利用しています。

JSPでフォームを作成して各フィールド値を、
Webサイト画面上から変更可能なつくりにしており、
複数あるいずれかのフィールドの値を1つ以上変更してから、
[保存]ボタンを押下した際に、
  ↓
その変更前のレコード1件と、
変更後のレコード1件を、
同じログ用テーブル内へフラグ(変更前:0、変更後:2)を
それぞれ変えて、
INSERT INTOでレコードを計2件追加しています。
(あわせて、追加時のタイムスタンプをセットする...続きを読む

Aベストアンサー

チェック用なら、以下のSQLでもいいんではないでしょうか。

select
concat(
case when a.c1=b.c1 then '' else concat(' c1:',b.c1) end
,case when a.c2=b.c2 then '' else concat(' c2:',b.c2) end
,case when a.c3=b.c3 then '' else concat(' c3:',b.c3) end ) compare
from a,b where キー条件~


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報