・エラーはでなくなった。それだけ。
"抜けてたのもあるが…………文字コードェ…………。
$sql = "update comment set photo = '".$row[0].".jpg' WHERE id = .$row[0];
mysql_query($sql);
↓↓
$sql = "update 'comment' set 'photo' = '".$row[0]."'.jpg WHERE id = .$row[0].";
$result = mysql_query($sql);
じゃないのかと思いつつ色々挿入箇所変えてみるが×;
Lesson11-1 ~画像のアップロード~って処がヒントかなー、違うのかなぁああ;
今日もできず_| ̄|○
2011年1月10日月曜日
2011年1月9日日曜日
1/8覚書自宅編
自分用。
・講習の記録で復習。本当に助かる。
・課題BBS復習+α。
MySQLが中途半端に動いていたようで。Windows再起動で難なくクリア。
**時間悩んでバカみたいだ_| ̄|.....○コロコロ
・カラムURLがはいらねぇええええと試行錯誤。
調べたらあれ? 資料側文法ミス?
【何度トライしても出来なかった資料記述】
ALTER TABLE 'comment' ADD 'url' TEXT AFTER 'content' ;
【一発クリア】
ALTER TABLE comment ADD COLUMN url text AFTER content;
’’いらねぇていうかCOLUMN抜けてる――――! ガビ゙━━(゚Д゚;)━━━ン!!
・そのほか脱字箇所∑(・∀・) ウワー !!
【誤】
submit.php のニックネームのデータを受け取っている箇所の後ろで
$url = $_POST[url];
insert 文に url を追加する。
【正】
submit.php のニックネームのデータを受け取っている箇所の後ろで
$url = $_POST["url"];
insert 文に $url を追加する。
※これ↓もあると助かったっす……
$sql = "INSERT INTO comment (nickname, content, created_at,url)
values ('".$nickname."','".$content."','".date('Y-m-d H:i:s')."','".$url."')";
うぬぬ……画像アップロード処理のサイト自体は見つけたものの、
またどこに入れりゃいいんだ、これ。
【また間違い探し】
ALTER TABLE `comment` ADD `photo` TEXT AFTER `url` ;
↓
ALTER TABLE comment ADD column photo TEXT AFTER url ;
ちょっと非道いぞ; ていうかtext…??? なんでblobに一応変更してみる。
↓
ALTER TABLE comment MODIFY COLUMN photo blob;
【なんでかエラー】
コピペすると文字コードが違うのかEclipseでエラー出した…ええと。
// 最後に入れた ID を取得する
$sql = "select id from comment order by id desc";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
// 画像データを保存する。
if (is_uploaded_file($_FILES['photo']['tmp_name'])){
move_uploaded_file($_FILES['photo']['tmp_name'], "./img/".$row[0].".jpg");
}
【都度手直しめんどいから修正】
// 最後に入れた ID を取得する
$sql = "select id from comment order by id desc";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
// 画像データを保存する。
if (is_uploaded_file($_FILES['photo']['tmp_name'])){
move_uploaded_file($_FILES['photo']['tmp_name'], "./img/".$row[0].".jpg");
}
【これ挿入箇所どこー?】
mysqlの前の$result = 抜けてる気がするのは本当に気のせいなんだろうか??
Eclipseじゃ場所変えでもcommentが構文エラー出してるし;
$sql = "update comment set photo = '".$row[0].".jpg' WHERE id = .$row[0];
mysql_query($sql);
画像つけると完了メッセージは出ない。まあ当然。
今日はもー無理。休む。
・講習の記録で復習。本当に助かる。
・課題BBS復習+α。
MySQLが中途半端に動いていたようで。Windows再起動で難なくクリア。
**時間悩んでバカみたいだ_| ̄|.....○コロコロ
・カラムURLがはいらねぇええええと試行錯誤。
調べたらあれ? 資料側文法ミス?
【何度トライしても出来なかった資料記述】
ALTER TABLE 'comment' ADD 'url' TEXT AFTER 'content' ;
【一発クリア】
ALTER TABLE comment ADD COLUMN url text AFTER content;
’’いらねぇていうかCOLUMN抜けてる――――! ガビ゙━━(゚Д゚;)━━━ン!!
・そのほか脱字箇所∑(・∀・) ウワー !!
【誤】
submit.php のニックネームのデータを受け取っている箇所の後ろで
$url = $_POST[url];
insert 文に url を追加する。
【正】
submit.php のニックネームのデータを受け取っている箇所の後ろで
$url = $_POST["url"];
insert 文に $url を追加する。
※これ↓もあると助かったっす……
$sql = "INSERT INTO comment (nickname, content, created_at,url)
values ('".$nickname."','".$content."','".date('Y-m-d H:i:s')."','".$url."')";
うぬぬ……画像アップロード処理のサイト自体は見つけたものの、
またどこに入れりゃいいんだ、これ。
【また間違い探し】
ALTER TABLE `comment` ADD `photo` TEXT AFTER `url` ;
↓
ALTER TABLE comment ADD column photo TEXT AFTER url ;
ちょっと非道いぞ; ていうかtext…??? なんでblobに一応変更してみる。
↓
ALTER TABLE comment MODIFY COLUMN photo blob;
【なんでかエラー】
コピペすると文字コードが違うのかEclipseでエラー出した…ええと。
// 最後に入れた ID を取得する
$sql = "select id from comment order by id desc";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
// 画像データを保存する。
if (is_uploaded_file($_FILES['photo']['tmp_name'])){
move_uploaded_file($_FILES['photo']['tmp_name'], "./img/".$row[0].".jpg");
}
【都度手直しめんどいから修正】
// 最後に入れた ID を取得する
$sql = "select id from comment order by id desc";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
// 画像データを保存する。
if (is_uploaded_file($_FILES['photo']['tmp_name'])){
move_uploaded_file($_FILES['photo']['tmp_name'], "./img/".$row[0].".jpg");
}
【これ挿入箇所どこー?】
mysqlの前の$result = 抜けてる気がするのは本当に気のせいなんだろうか??
Eclipseじゃ場所変えでもcommentが構文エラー出してるし;
$sql = "update comment set photo = '".$row[0].".jpg' WHERE id = .$row[0];
mysql_query($sql);
画像つけると完了メッセージは出ない。まあ当然。
今日はもー無理。休む。
2011年1月7日金曜日
1/7覚書
$_REQUESTの使い方
POSTとGETを両方使いたいときに利用するけど、あんまりシチュエーションないぞ。
print_r($変数); で配列出るぞ、と。位置は単独。
☆各入力情報をifで制限。
$name = $_REQUEST["names"];
if($name == ""){
print "名前が入力されていません";
}else{
print $name;
}
print "<br>";
まだtextのブランクに対してのみだけど。
☆掲示板
コピ元が色々やっつけ。間違い探しも含まれるということらしいw
返信が出なくて難産; }の閉じ位置だったよ
URLは帰ってからかな~。
ていうかどこにコピペするかぐらいは記述してほしかった……orz
今日のありがたそうな場所
文中にURLがあれば、それをリンク化したい
POSTとGETを両方使いたいときに利用するけど、あんまりシチュエーションないぞ。
print_r($変数); で配列出るぞ、と。位置は単独。
☆各入力情報をifで制限。
$name = $_REQUEST["names"];
if($name == ""){
print "名前が入力されていません";
}else{
print $name;
}
print "<br>";
まだtextのブランクに対してのみだけど。
☆掲示板
コピ元が色々やっつけ。間違い探しも含まれるということらしいw
返信が出なくて難産; }の閉じ位置だったよ
URLは帰ってからかな~。
ていうかどこにコピペするかぐらいは記述してほしかった……orz
今日のありがたそうな場所
文中にURLがあれば、それをリンク化したい
2011年1月6日木曜日
1/6覚書
・3日に釣りしてますが、釣り内容は後日。
・1時間目は自習。結局宿題やれんかった;;;
→この事実がどれだけ重いかこの時点では理解していなかった……。
・二時間目から宿題の覚えてほしいところを確認……だけのはずが、
ほとんどやってなかった(くわさますみませんほんとすみません;)ので。
☆九九の表
まずはphpだけ書いてみる
for($i = 1; $i<=9; $i++){
for($j = 1; $j<=9; $j++){
print ($i * $j);
}
print '<br>';
}
で、表にさせると……
print '<h3>九九の表</h3>';
print '<table border = "1">' ;
for($i = 1; $i<=9; $i++){
print '<tr height="25">';
for($j = 1; $j<=9; $j++){
print '<td width="25" align="center">'.($i * $j).'</td>';
}
print '</tr>';
}
print'</table>';
ネストの結果を表示させたいので2個目のfor文を<tr>、<td>タグで囲む。
ってここに書いた時点で明確に理解; 上から順番にタグつけてF5でできたのだ。
☆宿題抜粋その2 関数
1つの引数「 $zeikomi 」を持つ関数「 zeinuki 」を作成(宣言)してください
「 zeinuki 」は引数で与えられた数字から消費税5%を引いた税抜き価格を返します
function zeinuki($zeikomi){
return "税抜き". $zeikomi / 1.05 ."円です<br>" ;
}
print zeinuki( 525 ).' <br> ' ;
print zeinuki( 1050 ).' <br> ' ;
print zeinuki( 7350 ).' <br> ' ;
/をずっと%で考えてた……。
☆☆掲示板作成はんどあうと☆☆
POSTとか。
CGI掲示板とかでなじみ深い。今の子もブログじゃなくてWEB作成したらくっつけるのかな。
お絵かき掲示板もあるけどねー。
PHP的POINT
HTMLには「FORMタグ」という、入力を受け付けるためのタグが存在する。
FORMタグには2つの重要なプロパティがある。
・「action」… 入力された値の送信先
・「method」… 入力された値を送信する方法
<form action = "*****.php" method = "post">
methodは「POST」と「GET」がありますが、通常「POST」を使用します。
※POSTは送信した値がURLに表示されない、GETは表示される
AMAZONやwikiは別。
入力用エリアの作成は「INPUT」タグを利用する。
INPUTのプロパティとして主に
・type … 入力ボックスの形式
・name … 名前=PHPの連想配列キー名
・value … 値=PHPの連想配列値
☆送信フォーム練習問題
都道府県は省略。ほんとこれだけなら早いんだよなぁ……。
<table border= "1">
<form action = "rensendto.php" method = "post">
<tr><td>
氏名:</td><td><input type = "text" name = "namein"></td></tr>
<tr><td>
年齢:</td><td><input type = "text" name = "age"></td></tr>
<tr><td>
性別は:</td><td><input type = "radio" name = "sei" value = "male">男性
<input type = "radio" name = "sei" value = "female">女性</td></tr>
<tr><td>
住所<br>
都道府県:</td><td><select name = "address1"><option value="">選択してください</option>
<option value="神奈川県">神奈川県</option>
</select><br>
<font size="2">住所 例)新宿区西新宿1-22-25 ハイアットクーロン303号室</font><br>
<input type="text" name="address2" size="50" ></td></tr>
<tr><td>
電話番号:</td><td><input type="text" name="tel" ></td></tr>
<tr><td>
その他希望があれば入力してください:</td><td><input type="text" name="other" size="80" ></td></tr>
</table>
<input type ="submit" name="soushin" value = "送信する">
</form
んで受け手側はこんな感じ。長いから省略。
$_POST["キー名"]で割り当てて出す。と。
print "氏名:";
print $_POST["namein"];
print "<br>";
☆IDとパスワード入力
ログインページと認証用ページを作成。
IDとPASS設定。
成功→ログイン成功、最後に会員様ようこそを表示
失敗→ログイン失敗とプログラム強制終了
ログインページ全略☆ 上のとおんなじだし。
$_POST["☆"]が変数であると。そらそーだとなんか納得。
if ($_POST["id"] == "yamazaki" && $_POST["pass"] == "1234"){
print "ログイン成功" ;
}
else{
print "ログイン失敗" ;
exit;
}
print "会員様ようこそ";
ここから先、本当の処理ならinsertでDBに情報を登録しなければいけないんだけど、
それはまた後日。
23:24追記
自宅にもPleiades導入~。宿題ちょっとずつやります;
・1時間目は自習。結局宿題やれんかった;;;
→この事実がどれだけ重いかこの時点では理解していなかった……。
・二時間目から宿題の覚えてほしいところを確認……だけのはずが、
ほとんどやってなかった(くわさますみませんほんとすみません;)ので。
☆九九の表
まずはphpだけ書いてみる
for($i = 1; $i<=9; $i++){
for($j = 1; $j<=9; $j++){
print ($i * $j);
}
print '<br>';
}
で、表にさせると……
print '<h3>九九の表</h3>';
print '<table border = "1">' ;
for($i = 1; $i<=9; $i++){
print '<tr height="25">';
for($j = 1; $j<=9; $j++){
print '<td width="25" align="center">'.($i * $j).'</td>';
}
print '</tr>';
}
print'</table>';
ネストの結果を表示させたいので2個目のfor文を<tr>、<td>タグで囲む。
ってここに書いた時点で明確に理解; 上から順番にタグつけてF5でできたのだ。
☆宿題抜粋その2 関数
1つの引数「 $zeikomi 」を持つ関数「 zeinuki 」を作成(宣言)してください
「 zeinuki 」は引数で与えられた数字から消費税5%を引いた税抜き価格を返します
function zeinuki($zeikomi){
return "税抜き". $zeikomi / 1.05 ."円です<br>" ;
}
print zeinuki( 525 ).' <br> ' ;
print zeinuki( 1050 ).' <br> ' ;
print zeinuki( 7350 ).' <br> ' ;
/をずっと%で考えてた……。
☆☆掲示板作成はんどあうと☆☆
POSTとか。
CGI掲示板とかでなじみ深い。今の子もブログじゃなくてWEB作成したらくっつけるのかな。
お絵かき掲示板もあるけどねー。
PHP的POINT
HTMLには「FORMタグ」という、入力を受け付けるためのタグが存在する。
FORMタグには2つの重要なプロパティがある。
・「action」… 入力された値の送信先
・「method」… 入力された値を送信する方法
<form action = "*****.php" method = "post">
methodは「POST」と「GET」がありますが、通常「POST」を使用します。
※POSTは送信した値がURLに表示されない、GETは表示される
AMAZONやwikiは別。
入力用エリアの作成は「INPUT」タグを利用する。
INPUTのプロパティとして主に
・type … 入力ボックスの形式
・name … 名前=PHPの連想配列キー名
・value … 値=PHPの連想配列値
☆送信フォーム練習問題
都道府県は省略。ほんとこれだけなら早いんだよなぁ……。
<table border= "1">
<form action = "rensendto.php" method = "post">
<tr><td>
氏名:</td><td><input type = "text" name = "namein"></td></tr>
<tr><td>
年齢:</td><td><input type = "text" name = "age"></td></tr>
<tr><td>
性別は:</td><td><input type = "radio" name = "sei" value = "male">男性
<input type = "radio" name = "sei" value = "female">女性</td></tr>
<tr><td>
住所<br>
都道府県:</td><td><select name = "address1"><option value="">選択してください</option>
<option value="神奈川県">神奈川県</option>
</select><br>
<font size="2">住所 例)新宿区西新宿1-22-25 ハイアットクーロン303号室</font><br>
<input type="text" name="address2" size="50" ></td></tr>
<tr><td>
電話番号:</td><td><input type="text" name="tel" ></td></tr>
<tr><td>
その他希望があれば入力してください:</td><td><input type="text" name="other" size="80" ></td></tr>
</table>
<input type ="submit" name="soushin" value = "送信する">
</form
んで受け手側はこんな感じ。長いから省略。
$_POST["キー名"]で割り当てて出す。と。
print "氏名:";
print $_POST["namein"];
print "<br>";
☆IDとパスワード入力
ログインページと認証用ページを作成。
IDとPASS設定。
成功→ログイン成功、最後に会員様ようこそを表示
失敗→ログイン失敗とプログラム強制終了
ログインページ全略☆ 上のとおんなじだし。
$_POST["☆"]が変数であると。そらそーだとなんか納得。
if ($_POST["id"] == "yamazaki" && $_POST["pass"] == "1234"){
print "ログイン成功" ;
}
else{
print "ログイン失敗" ;
exit;
}
print "会員様ようこそ";
ここから先、本当の処理ならinsertでDBに情報を登録しなければいけないんだけど、
それはまた後日。
23:24追記
自宅にもPleiades導入~。宿題ちょっとずつやります;
12/28覚書
☆今までのおさらい
なんていうか、最初のころに比べるとすすんだなあ、と正直思う。
とは思いますが説明ちょっと早すぎっす。
count……うーん。休み中の課題にしよう。
ちょっとだけメモ。
-D studyでログインと同時にテーブル選択おk。
☆クラスの理解
ヒトが変数、行動がメソッドと考えると入りやすい。
☆年明け実習予定
BBSつくるよ!
そいでは皆様よいお年を。
なんていうか、最初のころに比べるとすすんだなあ、と正直思う。
とは思いますが説明ちょっと早すぎっす。
count……うーん。休み中の課題にしよう。
ちょっとだけメモ。
-D studyでログインと同時にテーブル選択おk。
☆クラスの理解
ヒトが変数、行動がメソッドと考えると入りやすい。
☆年明け実習予定
BBSつくるよ!
そいでは皆様よいお年を。
2011年1月1日土曜日
2010年12月27日月曜日
12/27覚書
いまさらメモ
プロンプトって;つけないでEnterすると改行できるんDA!
てか気づくの遅EEEEEEEEEEEE
desc テーブル名;で各カラムのステ内容がでてくる。
☆ テーブルの正規化(参照フォルダは1227)
・システム設計の最初に行うこと
・テーブルを一定のルールで変形し利用効率をあげる=正規化
・第1~第5段階まであるが、最近は第2段階までの利用が多い。
★非正規化(素)
・Excelでセルに複数個
★★間違った修正★★
横に足さない!! 一度つくったテーブルにカラム追加はありえない!!
★正規化手順1
データは縦に足す。
1レコードのデータがすべてユニークになるように変更。
問題点
カラムごとの重複データが生じる。
★正規化手順2
受講者情報を格納したテーブルと講座情報を格納したテーブルに分割し独立。
◆これだけだと関連付けがないので、今回は受講者番号と口座番号のみのテーブルを別途作成。
第2正規化 受講だと第1正規化のシートとイコールになる。joinで連結できる。
これでtextの重複データをなくし、軽いintでの管理が可能となる。
◆VARCHARとCHARとTEXTの違い
CHARは固定文字列。CHAR(2)なら二文字必ず入力。
固定化したほうがメモリを食わないのでコストパフォーマンスに優れる。
最大の違い。
VARCHAR、CHARのカラムはindex可。
TEXT型のカラムにはindex不可。
indexをつけたいカラムの文字列はあらかじめVARCHARにしておく。
★1227フォルダのテーブルとデータインポート。復習のため記述省略
◆単純結合joinで練習~※途中※
select
student.id,
student.name,
address.student_id,
course.course_name,
jyukou.jyukou_name
from
student,
jyukou,
course
where
address.student_id = jyukou.jyukou_id
and address.course_id = .course_id;
★単純結合join超わかりやすいサンプル
SELECT
j.jyukou_id as "受講ID",
s.s_name as "受講者名",
s.s_address as "受講者住所",
s.s_tel as "受講者TEL",
c.c_name as "コース名",
c.c_place as "開講場所",
c.c_day as "開講日",
c.c_teacher as "担当講師"
FROM
student as s,
course as c,
jyukou as j
WHERE
j.s_num = s.s_num
and
j.c_num = c.c_num
ORDER BY
j.jyukou_id asc
;
◆鎌倉校だけ抜き出す
and c.c_place like '鎌倉%'
◆英語講座だけ抜き出す
and c.c_name like'英語基礎%'
◆データを削除した場合
※素朴に忘れてた削除命令;
delete from テーブル名 where カラム名;
削除すると結合時に存在しないデータの影響で不整合が起きてしまう。
☆リレーションシップ 関連付け
上記のままだと各個単独のテーブルのため、つど関連付けをするのは効率が悪い。
そのため外部参照という処理で親テーブルと子テーブルに設定すると連携できる。
正規化とセットで動くかなり一般的な手法なので覚えておこう。
◆外部キー参照のcreate tableで再生成。
◆指定したいカラムはnot nullで主キーかuniqueキー必須。
◆親テーブルには検索対象カラムにはindex必須。
ついでに検索対象になりうる項目も指定する。(上記条件クリアのテーブル限定)
↓index前の名前は変数みたいなの。好きにつけられる。
INDEX studentIndex ( s_num, s_name, s_tel ) ←カラムは複数可能
◆メリットとデメリット
メリット:誤削除、不要な追加不可→不整合なデータが存在しない。
削除しようとしてもこんなエラーが出る
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint
fails (`study`.`jyukou`, CONSTRAINT `jyukou_ibfk_2` FOREIGN KEY (`c_num`)
REFERENCES `course` (`c_num`))
削除は先に子テーブルの関係するidから削除する。
courseのid6を削除したいなら、先にjyukouのidが6のものを削除。
追加は先に親テーブルのカラムにデータを追加する
デメリット:NULL値利用不可。NULL値がどうしても入ってしまうテーブルなら外部参照は不向き。
※外部参照なくてもphpで制御する手法もある
参照先は子テーブルで設定する
FOREIGN (フォーリン):外部の
REFERENCES (リファレンス):参照
FOREIGN KEY ( s_num ) REFERENCES student ( s_num ),
FOREIGN KEY ( c_num ) REFERENCES course ( c_num )
◆ENGINE=InnoDB ??
MySQLにはいくつかのエンジンがあり、デフォルトはMyISAMだが、
外部参照を使うための拡張オプションとしてInnoDBに指定する必要がある。
ソースの一番最後でおk。
ENGINE=InnoDB
★定義の文書化 正規化手順.ods参照
いわゆるコードまとめと注釈。現場で提出要求あるので作成するくせをつけよう。
★ER図。相関図 正規化手順.ods参照
リンクツリーみたいなの。大規模システムだと必須。(つか視覚化ソフトありそう;)
★練習問題
正規化ステップ
1.縦にグループ化
2.重複データを排除
3.1テーブルにuniqueな番号をつけて、primaryキーに設定。
4.整数型で紐付ける。
☆eclipseとは?
IBMが開発した総合開発環境=IDE eclipse解説はここ
IDEて?
・プロジェクト管理
・チーム開発
・作成補助
・コンパイラ
・テキストエディタ
・ビルド、デバッガ
をひとくくりでできるソフト。
eclipseで初期プロジェクトちょっと作った。明日はもっと触りそう。
プロンプトって;つけないでEnterすると改行できるんDA!
てか気づくの遅EEEEEEEEEEEE
desc テーブル名;で各カラムのステ内容がでてくる。
☆ テーブルの正規化(参照フォルダは1227)
・システム設計の最初に行うこと
・テーブルを一定のルールで変形し利用効率をあげる=正規化
・第1~第5段階まであるが、最近は第2段階までの利用が多い。
★非正規化(素)
・Excelでセルに複数個
★★間違った修正★★
横に足さない!! 一度つくったテーブルにカラム追加はありえない!!
★正規化手順1
データは縦に足す。
1レコードのデータがすべてユニークになるように変更。
問題点
カラムごとの重複データが生じる。
★正規化手順2
受講者情報を格納したテーブルと講座情報を格納したテーブルに分割し独立。
◆これだけだと関連付けがないので、今回は受講者番号と口座番号のみのテーブルを別途作成。
第2正規化 受講だと第1正規化のシートとイコールになる。joinで連結できる。
これでtextの重複データをなくし、軽いintでの管理が可能となる。
◆VARCHARとCHARとTEXTの違い
CHARは固定文字列。CHAR(2)なら二文字必ず入力。
固定化したほうがメモリを食わないのでコストパフォーマンスに優れる。
最大の違い。
VARCHAR、CHARのカラムはindex可。
TEXT型のカラムにはindex不可。
indexをつけたいカラムの文字列はあらかじめVARCHARにしておく。
★1227フォルダのテーブルとデータインポート。復習のため記述省略
◆単純結合joinで練習~※途中※
select
student.id,
student.name,
address.student_id,
course.course_name,
jyukou.jyukou_name
from
student,
jyukou,
course
where
address.student_id = jyukou.jyukou_id
and address.course_id = .course_id;
★単純結合join超わかりやすいサンプル
SELECT
j.jyukou_id as "受講ID",
s.s_name as "受講者名",
s.s_address as "受講者住所",
s.s_tel as "受講者TEL",
c.c_name as "コース名",
c.c_place as "開講場所",
c.c_day as "開講日",
c.c_teacher as "担当講師"
FROM
student as s,
course as c,
jyukou as j
WHERE
j.s_num = s.s_num
and
j.c_num = c.c_num
ORDER BY
j.jyukou_id asc
;
◆鎌倉校だけ抜き出す
and c.c_place like '鎌倉%'
◆英語講座だけ抜き出す
and c.c_name like'英語基礎%'
◆データを削除した場合
※素朴に忘れてた削除命令;
delete from テーブル名 where カラム名;
削除すると結合時に存在しないデータの影響で不整合が起きてしまう。
☆リレーションシップ 関連付け
上記のままだと各個単独のテーブルのため、つど関連付けをするのは効率が悪い。
そのため外部参照という処理で親テーブルと子テーブルに設定すると連携できる。
正規化とセットで動くかなり一般的な手法なので覚えておこう。
◆外部キー参照のcreate tableで再生成。
◆指定したいカラムはnot nullで主キーかuniqueキー必須。
◆親テーブルには検索対象カラムにはindex必須。
ついでに検索対象になりうる項目も指定する。(上記条件クリアのテーブル限定)
↓index前の名前は変数みたいなの。好きにつけられる。
INDEX studentIndex ( s_num, s_name, s_tel ) ←カラムは複数可能
◆メリットとデメリット
メリット:誤削除、不要な追加不可→不整合なデータが存在しない。
削除しようとしてもこんなエラーが出る
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint
fails (`study`.`jyukou`, CONSTRAINT `jyukou_ibfk_2` FOREIGN KEY (`c_num`)
REFERENCES `course` (`c_num`))
削除は先に子テーブルの関係するidから削除する。
courseのid6を削除したいなら、先にjyukouのidが6のものを削除。
追加は先に親テーブルのカラムにデータを追加する
デメリット:NULL値利用不可。NULL値がどうしても入ってしまうテーブルなら外部参照は不向き。
※外部参照なくてもphpで制御する手法もある
参照先は子テーブルで設定する
FOREIGN (フォーリン):外部の
REFERENCES (リファレンス):参照
FOREIGN KEY ( s_num ) REFERENCES student ( s_num ),
FOREIGN KEY ( c_num ) REFERENCES course ( c_num )
◆ENGINE=InnoDB ??
MySQLにはいくつかのエンジンがあり、デフォルトはMyISAMだが、
外部参照を使うための拡張オプションとしてInnoDBに指定する必要がある。
ソースの一番最後でおk。
ENGINE=InnoDB
★定義の文書化 正規化手順.ods参照
いわゆるコードまとめと注釈。現場で提出要求あるので作成するくせをつけよう。
★ER図。相関図 正規化手順.ods参照
リンクツリーみたいなの。大規模システムだと必須。(つか視覚化ソフトありそう;)
★練習問題
正規化ステップ
1.縦にグループ化
2.重複データを排除
3.1テーブルにuniqueな番号をつけて、primaryキーに設定。
4.整数型で紐付ける。
☆eclipseとは?
IBMが開発した総合開発環境=IDE eclipse解説はここ
IDEて?
・プロジェクト管理
・チーム開発
・作成補助
・コンパイラ
・テキストエディタ
・ビルド、デバッガ
をひとくくりでできるソフト。
eclipseで初期プロジェクトちょっと作った。明日はもっと触りそう。
登録:
投稿 (Atom)