[PR]
2024/11/24/Sunday
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
MySql 自動採番のようなINSERT文(仮想テーブルを使う)
2013/07/01/Monday
IDと連番を格納するようなテーブルで、連番をどんどん+1(インクリメント?)していくような処理がしたい。自動採番というか。
たとえば、
--------------------
No | order| data
--------------------
1 | 1 | apple
1 | 2 | orange
1 | 3 | cherry
2 | 1 | red
2 | 2 | blue
--------------------
このテーブルでいうと、No=1に追加するなら次はorder=4ね、みたいな処理を、できればSQL一文でやっちゃいたいなと。
そんなわけで試したこと↓
・テーブルをcreateする時点で「AUTO_INCREMENT」にする
→キーじゃないのでダメ
・INSERT文のvalueの中で+1
→書式がおかしいので当たり前のようにエラー
・INSERT SELECTで、max()を使って取得
→自分自身をSELECTすることはできないらしい。
ここで、select文をサブクエリーとして、仮想テーブル(テンポラリテーブル?)のように使えばクリアできるという裏技を発見。
そこからまた試行錯誤。
試したこと第二弾↓
・テンポラリテーブルの定義(asを付ける)のタイミング
→select文の外、カッコで括らないとだめみたい
・max()で値取得
→該当データがないときはnullが返ってくる
・NVL()でnull回避
→MySqlでは使えなかった(IFNULLを使う)
こうして最終的にたどり着いた、思ってたよりも壮大なsqlがこちらになります。
insert into edit_tbl( `no`, `order`, `data` ) values ( 1, (select tmp_tbl.next_order from (select IFNULL(max(`order`),0)+1 as next_order from edit_tbl where `no`=1) as tmp_tbl) , 'testdata' );
長っっ!!!
これだと後から見たときになにが(私のレベルだと)なんだかさっぱりわからないので、
普通に、SELECTしてからINSERT、という手順に切り替えようと思いました。
教訓:あとから見たときの分かりやすさが一番。
php checkboxのオン/オフ(checked)の値を取得
2013/06/28/Friday
チェックボックスのオン/オフの状態を取得する方法。
postでもgetでも、オンの値しか返してくれないのでひと手間が必要。
(これはaspでもはまったなぁ…)
チェックボックスが1つであれば、
オンのとき→1、オフのとき→0という具合に取得できます。
今回やりたいのは、チェックボックス自体が配列の場合。
個数も動的に変えていきたい。
↑の例と同じように書いてしまうと、
結果は、
もともと配列なので、オンにすると両方取れてしまう。
配列の引数直書きはめんどくさいので避けたい。ということで、こんな風に解決しました↓
checkboxのvalueにキーとなる値(IDなど)を持たせる。
↓
オンになっているものだけ配列で取得できるので、
その配列の中からキー値を検索。
↓
あればオンの処理、なければオフの処理。
という流れです。
これだけだと、全部オフの場合にarray_searchが動かないので、html側にもひと手間。
こんなかんじで、同じ名前でhiddenを持たせておけば、必ずlengthが1以上の配列になるので安心です。
(この配列をループで使うときなどは注意)
postでもgetでも、オンの値しか返してくれないのでひと手間が必要。
(これはaspでもはまったなぁ…)
チェックボックスが1つであれば、
<input name="hoge" type="hidden" value="0" /> <input name="hoge" type="checkbox" value="1" />
オンのとき→1、オフのとき→0という具合に取得できます。
今回やりたいのは、チェックボックス自体が配列の場合。
個数も動的に変えていきたい。
<input name="hoge[]" type="hidden" value="0" /> <input name="hoge[]" type="checkbox" value="1" />
↑の例と同じように書いてしまうと、
結果は、
array (size=2) 0 => string '0' (length=1) 1 => string '1' (length=1)
もともと配列なので、オンにすると両方取れてしまう。
配列の引数直書きはめんどくさいので避けたい。ということで、こんな風に解決しました↓
//POSTの値を格 $arr_no = $_POST['no']; //キー $arr_chk = $_POST['chk']; //チェックボックスの値の配列 foreach($arr_no as $key => $val){ //チェックボックス配列からキーを検索 $tmp=array_search($val,$arr_chk); if(!($tmp===false)){
echo $arr_no[$tmp] . "のチェックボックスはON!"; } }
checkboxのvalueにキーとなる値(IDなど)を持たせる。
↓
オンになっているものだけ配列で取得できるので、
その配列の中からキー値を検索。
↓
あればオンの処理、なければオフの処理。
という流れです。
これだけだと、全部オフの場合にarray_searchが動かないので、html側にもひと手間。
<input name="chk[]" type="checkbox" value="1" /><br /> <input name="chk[]" type="checkbox" value="2" /><br /> <input name="chk[]" type="checkbox" value="3" /><br /> <input name="chk[]" type="hidden" value="NULL回避用" />
こんなかんじで、同じ名前でhiddenを持たせておけば、必ずlengthが1以上の配列になるので安心です。
(この配列をループで使うときなどは注意)
WordPressプラグイン作成:MySqlの文字コード指定
2013/06/27/Thursday
【現象】
ワードプレスから自作テーブルをcreate
↓
「MySQL Query Browser」というソフトで中身を確認&テストデータ作成
↓
文字化け。。。
【原因調査】
xamppを使ってローカルで動かしていたときに問題なかったのは、デフォルトがたまたまutf-8だったっぽい。
SQL文にCHARACTER SETつけるだけという、ものすごく単純なことでした。
【解決方法】
【 参考】
http://www.webopixel.net/wordpress/637.html
http://wpdocs.sourceforge.jp/WordPress_%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E5%9F%BA%E6%BA%96
ワードプレスから自作テーブルをcreate
↓
「MySQL Query Browser」というソフトで中身を確認&テストデータ作成
↓
文字化け。。。
【原因調査】
xamppを使ってローカルで動かしていたときに問題なかったのは、デフォルトがたまたまutf-8だったっぽい。
SQL文にCHARACTER SETつけるだけという、ものすごく単純なことでした。
【解決方法】
create table( ~~ ) CHARACTER SET 'utf8';
【 参考】
http://www.webopixel.net/wordpress/637.html
http://wpdocs.sourceforge.jp/WordPress_%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E5%9F%BA%E6%BA%96
最新記事
(09/03)
(09/03)
(09/02)
(09/02)
(08/27)