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

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

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

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

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

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

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

A 回答 (3件)

#2回答者です。



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

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

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

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

お礼日時: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
    • 4
この回答へのお礼

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

お礼日時: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やきとり屋さん。やきとりの原価率教えてください

やきとり屋さん。やきとりの原価率教えてください

Aベストアンサー

材料費という意味では、串代入れて売価の3割ぐらいです。
それぐらいじゃないとやってられません。

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かとりせんこう立て(Y字型のもの)がなく代用品を・・

題字のとおりです。
もう、蚊にかまれるのでかとりせんこうをしていますが、
かとりせんこう立てがなくクリップで代用しましたが、危ないので、途中でかとりせんこうを消しました。
Y字型のかとりせんこう立てを、なくしみあたりませんので困っています。
代用できるものはありませんか?
腕を何箇所もかまれるので熟睡できません。

Aベストアンサー

(金製)クリップが有るなら、蚊取り線香の真ん中をクリップで挟み、
「糸で吊るす」と言う手が有ります。
吊るすスタンドは、針金ハンガーでも自作ますし、電気スタンドなども利用出来ます。
蚊取り線香の下には、アルミホイルかアルミや瀬戸物の皿を置いておく。

ちなみに、携帯用の「網付き蚊取り線香皿」を買っておくと便利ですし、今は「お洒落な感じの、蚊取り線香ホルダー」も有るようです。
(^^)

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` ...続きを読む

Qやきとりやについて

新宿でやきとりだけちょっと食いたいなと思って

ガード下の近くのやきとりやにはいったら

「飲み物は?」と聞かれ 次の日に大事な用事があっ

て酒はいらなかったのでやきとりを食いたい旨つげる

と、飲み物(酒)を頼まないとだめといわれたことが

あります。だからでました。

やきとりくいたかったのに(笑)

これってふつうですか?

Aベストアンサー

全部が全部ではないと思います。
飲兵衛さんたちは、飲むとあまりつままない人が多いので安価な焼き鳥
を「えさ」に飲み物を注文させようと言うのが狙いではないでしょうか。
新宿のように黙ってても次々客が来るような場所では、店が客を選ぶという
殿様商売を平気でやるのでしょう。率のいい客を選ぶのです。

関連して、焼き鳥屋によっては、「お通し」というツマミを先だしする店があります。
200~500円くらいですが食べようが食べまいが客は拒否できません。
いわゆる席料に置き換えられるようです。日本独特の居酒屋の習慣ですね。

焼き鳥だけ食べたいのなら、テイクアウトという方法も出来たのではないでしょうか。
飲まない場合は店先で焼いてもらって持ち帰るのが一般的だと思います。

〓ご参考になれば幸いです〓

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");
とすればよいでしょう。

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

Q中学生のノートのとり方について。

私は今年中学生になるのですが授業中のノートのとり方がいまいちわかりません。
チャレンジで書いてあったノートのとりかたを参考にしたのですが、(線を引いて余白をとったり、かっこなどをそろえる)それでいいのかもわからなくて・・・(クラスの子は行いっぱいにぎっしりかいていて・・・)。
ペンは蛍光ペンで引けばいいかなと思っているんですが、ノートの書き方はどのようにみなさんしていますか?テスト前に見やすいノートとか先生に評価されるようなノートのとり方が良いです。皆さんこんな小さな質問ですが、よかったら詳しくわかりやすい回答待っています。

Aベストアンサー

元教師・現役予備校講師です

簡単に回答しましょう

>テスト前に見やすいノートとか先生に評価されるようなノートのとり方が良いです。

小生は「教育臨床論」上では『ノートは当事者が理解するための手段に過ぎない』、という立場なので、当人が理解するための手段に過ぎないノートに執着する必要性については、懐疑的です
簡単にいえば、ノートは問題ではなく、理解することが重要なわけです

したがって、見やすいノート・先生に評価されるノートというノウハウについては回答できません

しかし、無難かつ理解しやすいノート術については一応は説明できるので、説明しましょう

まずは、ノートは一冊で整理する必要性はありません

極論すれば、
学校の黒板の記述(「板書」といいます)を”とりあえず速記・複写するノート”(第一次ノート)
復習の際に、第一次ノートを自分なりに整理し、テスト対策を想定した「自分で教科書・板書を整理したノート(第二次ノート)
と二段階でノートを活用します。つまりは、授業中で利用するノートは、テスト対策では利用せずに、先生の授業内容と教科書を詰め込むための第一段階として利用します
このようなノート術は王道とも言えます。

なお、先生に提出するノートは第一次ノートではなく、第二次ノートでいいでしょう

ノートの文字修飾ですが、第二次ノートだけで十分です。授業ノート(第一次ノート)はあくまでも板書を忠実に模写するだけでも問題ありません。要は第二次ノートが重要なので・・・
 就職方法は個人の嗜好なので、ご自由に

小生は、ノートで学習する部類ではなく、教科書に激しく書き込み(落書きを含む)して学習する部類だったので・・・

なお、先生の評価を気にするならば、第二次ノートで自分なりの理解過程が見えるようなノートがいいでしょう

以上


皆さんこんな小さな質問ですが、よかったら詳しくわかりやすい回答待っています。

元教師・現役予備校講師です

簡単に回答しましょう

>テスト前に見やすいノートとか先生に評価されるようなノートのとり方が良いです。

小生は「教育臨床論」上では『ノートは当事者が理解するための手段に過ぎない』、という立場なので、当人が理解するための手段に過ぎないノートに執着する必要性については、懐疑的です
簡単にいえば、ノートは問題ではなく、理解することが重要なわけです

したがって、見やすいノート・先生に評価されるノートというノウハウについては回答できません

しかし、無難かつ理...続きを読む

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ランキング