No.3ベストアンサー
- 回答日時:
> ・最新のレコードからIDを取り出すのはどのような関数を使えばよいのでしょうか?
最新のレコードは常にIDの最大値をとるとすれば、SQL文は、
$sql = "SELECT MAX(id) FROM table";
のようにすればよいと思います。
> ・ID取得にこだわる理由は、データが書き込まれた順番にカウンタ値として、IDを取得しようと考えています。IDの他にも、テーブルに書き込まれた順番をカウントさせる方法はあるのですか?
要はMysqlに勝手にカウントアップさせるか、手動でカウントアップするか、だと思うんですよ。
で、何度もDBとやりとりさせるよりは、手動でカウントアップさせるようにした方が簡潔な処理が可能になりますよね。
で、上記のIDの取り出しからの一連の流れはこんな感じで書けると思うのですが、いかがでしょうか。
----------
$sv = "localhost";
$dbname = "hogehogehoge";
$user = "root";
$pass = "";
/* 最新のIDの取得 */
$conn = mysql_connect("$sv", "$user", "$pass");
mysql_select_db($dbname) or die("接続エラー");
$i = mysql_query("SELECT MAX(id) FROM table", $conn) or die ("SQL Error");
mysql_close($conn);
/* IDのカウントアップと数値・乱数の連結 */
++$i;
$var = $i . $num . $rand();
/* DBへの書込み */
$sql = "INSERT INTO table VALUES ('$i','hoge1','hoge2','~','$var')";
$db = mysql_connect("$host", "$user", "$pass");
mysql_select_db($dbname) or die("接続エラー");
mysql_query($sql, $db);
mysql_close($db);
----------
乱数関数($rand)については、正確な書き方ではないので、書籍やサイトのマニュアル等で確認して下さい。
> ・種別+カウンタ値+乱数として、
> IDを発行して再度、同テーブルに書き込み情報を管理させようと思っていますが、
> 同テーブルへの再接続というのはできないのでしょうか?
これって最終的にDBに登録されるIDフィールドのデータは連番にはならないようにする、ということなんでしょうか?
だとすると、上のIDの取得部分はもう少し複雑にしなきゃいけませんね。
IDフィールドの値を一度すべてとってきて、数値、乱数部分を切り捨てたあと、最大値を拾ってカウントアップ、というような手順でしょうか。
この回答への補足
imeruchanさん
ご丁寧な解説ありがとうございます。
教えていただいた方法で、
試しにIDのみを取得してブラウザに反映させようと思ったのですが、
Resource id #3と表示されて、最新の入力したデータの、
レコードのIDが表示されませんでした。
取り出したいテーブルのIDの設定は、
id , int(11) , not null , auto_increment , primary key(id)です。
以下phpのソースです。
<?php
//
$sv = "hoge";
$dbname = "hoge";
$user = "root";
$pass = "hoge";
// データベースに接続する
$conn = mysql_connect($sv, $user, $pass) or die("接続エラー");
mysql_select_db($dbname) or die("接続エラー");
$i = mysql_query("SELECT MAX(id) FROM hogehoge", $conn) or die ("SQL Error");
echo "<p>テスト表示";
echo "<p>$i";
mysql_close($conn);
?>
試しに、
$i = mysql_query("SELECT MAX(id) FROM hogehoge group by id", $conn) or die ("SQL Error");
としても結果は同じでした。
例えば23番目に入力したのであれば、23と表示させたいのですが、うまくいきません。
なにが理由と思われますか?
よろしくお願いいたします。
No.4
- 回答日時:
> Resource id #3と表示されて、最新の入力したデータの、
> レコードのIDが表示されませんでした。
$i = mysql_query("SELECT MAX(id) FROM hogehoge", $conn) or die ("SQL Error");
↑mysql_query を echo しているのですから、
出力されるのは当然、Resource id です。
結果をプリントするためには、
mysql_result(リソースID,行番号,カラム名)
みたいに、query結果を分割して出力しないとダメです。
mysql_result($i, 0, "MAX")
で。
No.2
- 回答日時:
> ・最新のレコードからIDを取り出すのはどのような関数を使えばよいのでしょうか?
最新のIDが最も大きい数値と考えていいのでしょうか?それだったら、
select max(id) from table_name;
で取得できます。
> ・ID取得にこだわる理由は、データが書き込まれた順番にカウンタ値として、IDを取得しようと考えていま
> す。IDの他にも、テーブルに書き込まれた順番をカウントさせる方法はあるのですか?
テーブルの再構築は可能でしょうか?
可能であれば、IDをシリアルにすることをお勧めしますが…
> 同テーブルへの再接続というのはできないのでしょうか?
これはよく意味が分かりませんが、DBへのコネクションを一回一回切断しているのでしょうか?
この回答への補足
kusukusuさん
ご返事有り難うございます。
データベースを始めたばかりで、
とんちんかんなことを聞くようですが、
DBへのコネクションを接続したまま、
テーブルに書き込む、書き込んだデータを取得、
データを加工後に再度、同テーブルに書き込むことは可能なのでしょうか?
その場合関数はどういう動きになるのでしょうか?
よろしくお願いいたします。
No.1
- 回答日時:
2の手順でDBに書き込む前に、最新のレコードのID(仮にnとします)を取り出し、フォームデータをDBに渡す際、IDとしてn+1を付与してあげるようにした方が簡単ではないでしょうか。
3の数値、乱数が何によるものかは分かりかねますが、上記のような処理にかえることでDBからIDを取り出す必要がなくなりますから、不必要なコネクションを省略することはできますよね。
4に関しては、おそらく別テーブルに保存ということかと思いますが、これらの一連の操作は、もちろん1ファイル内に記述しても問題なく動作させることができるはずです。
この回答への補足
imeruchanさん
ご返事ありがとうございます。
補足と追加の質問があります。
・最新のレコードからIDを取り出すのはどのような関数を使えばよいのでしょうか?
・ID取得にこだわる理由は、データが書き込まれた順番にカウンタ値として、IDを取得しようと考えています。IDの他にも、テーブルに書き込まれた順番をカウントさせる方法はあるのですか?
・種別+カウンタ値+乱数として、
IDを発行して再度、同テーブルに書き込み情報を管理させようと思っていますが、
同テーブルへの再接続というのはできないのでしょうか?
何度か試しましたが、
<?php
//
$sv = "localhost";
$dbname = "hogehogehoge";
$user = "root";
$pass = "";
//
$conn = mysql_connect($sv, $user, $pass) or die("接続エラー");
mysql_select_db($dbname) or die("接続エラー");
$sql = "SELECT * FROM hogedata000 ORDER BY id DESC";
$res = mysql_query($sql, $conn) or die("データ抽出エラー");
?>
----------中略----------
<?php
mysql_close($conn);
?>
----------中略----------
<?php
//
$sv = "localhost";
$dbname = "hogehogehoge";
$user = "root";
$pass = "";
//
$conn = mysql_connect($sv, $user, $pass) or die("接続エラー");
mysql_select_db($dbname) or die("接続エラー");
$sql = "SELECT * FROM hogedata000 ORDER BY id DESC";
$res = mysql_query($sql, $conn) or die("データ抽出エラー");
?>
----------中略----------
<?php
mysql_close($conn);
?>
こういうことではないのでしょうか?
参考書を読みながら、あれこれ試しているのですが
うまくいきません。。。
いろいろ質問ばかりで申し訳ございませんが、
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
csvをDBへ読み込んだら、NULLが...
-
PHPとMysql での順位付け
-
SQLで返り値が空とでる
-
PHPでMySQLのテーブルをダン...
-
mysqlコマンドだけ文字化け
-
MYSQLのTRUNCATE TABLE
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
ResultSetインターフェイスでの...
-
insert1つの処理でもトランザ...
-
PHPで[]の使い方について
-
JAVA SQLServerException 列名 ...
-
VB.NET
-
BLOBでの画像表示について
-
DBで検索結果に該当するデータ...
-
エラー3011
-
SQL文2つ実行
-
in 'where clause'のエラーの理由
-
sqlから多次元配列に要素を格納...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
変数にNULLを代入したい
-
csvをDBへ読み込んだら、NULLが...
-
OracleからAccessへのインポート
-
日またぎの計算
-
カラムにデータがあるかないか...
-
SQLで返り値が空とでる
-
phpでテーブルを作る際変数によ...
-
PHPでフォームからデータDBに書...
-
php sqlite count 列数取得
-
テーブルの、colspan="0"のIEと...
-
PHP PDOを利用してカラムの削除...
-
テーブルに行を追加
-
ヒアドキュメントでSQLを書く事...
-
PHPでPostgreSQLのテーブルを表...
-
DB Error: no such field
-
Accessへ日付をINSERT
-
phpを使用し、カテゴリー別に表...
-
クエリObjectをforeachで回す時...
-
phpにて出欠登録管理を作成して...
おすすめ情報