SELECT * FROM `makers` ,my_items where my_items.id=1 AND makers.id=my_items.maker_id;
を
テーブル名をショートカットして
SELECT * FROM `makers` m, my_items i WHERE i.id=1 AND i.id=i.maker_id;
とすることも可能です
どちらかというと、サンプルなどを書籍でみると
ショートカットしているほうが多いかも
やり方は
テーブル名 ショートカット名
というようにします
今回だと
my_items m
C とか java の変数宣言のようなかんじです
カテゴリー: MySQL
MYSQL のメモ (リレーション)
リレーションを使用してみました
リレーションは Relation つまり、関連性で
複数のテーブルをその関連性からつないで1つのテーブルのように扱う機能のこと
まずは、実践
SELECT * FROM `makers` ,my_items where my_items.id=1 AND makers.id=my_items.maker_id;
これで
一発で生産者情報と、商品情報が得られる
うーん、便利
続いて実験その2
SELECT * FROM `makers` ,my_items where makers.id=my_items.maker_id;
ちなみに、phpMyAdmin の場合、該当する部分が黄色い枠で囲われるので
わかりやすい
このリレーションのポイントとなるのが、FROM のところ
検索したいDBテーブルを , で区切って指定することで複数のテーブルから
条件検索が可能になります
複数テーブルを指定した場合、必ずキーとなるフィールドを使わないとダメ
例えば、今回のように WHERE の後にある
AND makers.id=my_items.maker_id
これは
maker テーブル の id と
my_items テーブルの maker_id が
一致したデータを検索という意味になります
これ、 java とかでプログラミング経験あるとわかりやすいかも
javascript とかでもよくある書き方です
書き方は、
テーブル名と カラム名を .でつないで記述します
つまり、今回なら
makers テーブル と id カラムなので
makers.id となります
なぜ、こんな面倒なことを指定するかというと
id が
makers テーブルなのか
my_items テーブルなのかがわからないからです
仕事で、部品を持ってきてと言われても、同じ名前の部品でしたら
どのテーブルかわからないと持ってこれません
つまり、わかりやすい細かい指示をしましょうということです
~のテーブルにある~という部品をもってきて
というように指示するようなものです
アレもってきて
では意味がわかりませんので
それはさておき、
複数のテーブルをつないでデータ検索することが
リレーションをはるということになります
MySQL のメモ(計算、集計機能)
DBであつかう量が増えると
さすがに1つのテーブルでは難しくなります
このため
プログラムコードを複数にわけるように
テーブルも複数に用途ごとにわけるようになっていきます
というわけで書籍を参考にしてテーブルを追加します
phpAyAdmin でDBを選択して。テーブルの追加をします
テーブル名 makers
フィールド数 4
id INT
name TEXT
address TEXT
tel TEXT
として
id のインデックスで PRIMARY を選んで
プライマリキーを設定
A_I にチェックを入れてオートインクリメントを有効にします
以上の設定をしたら、保存をクリック
次に、SQLで
insert を使って各種情報を入力します
INSERT INTO `makers`set name=’山田さん’, address=’東京都港区’,tel=’000-111-222′;
というように、
, で区切って入力していきます
ある程度入力したら
次にテーブルを結びつけるフィールドを作成
今度は my_items へ戻って
id の後にカラムを追加します
カラム名 maker_id
種類 INT
ALTER TABLE `my_items` ADD `maker_id` INT NOT NULL AFTER `id`
でもOKです
できたら、次に update で数値を入力します
UPDATE `my_items` SET maker_id=1 where id=1;
MySQL のメモ(計算、集計機能)
mysql を使って計算も可能
SELECT sum(price) FROM `my_items`;
とすると、price の合計を出せます
これとwhere を組み合わせて、年刊合計とか、
週間の売上を出したりできます
ほかにも
SELECT max(price) FROM `my_items` ;
で最高値表示
select min(price) from my_items;
最安値表示
SELECT count(id) FROM `my_items`;
ヒットしたデータの件数取り出し
SELECT AVG(price) FROM my_items;
平均値を表示
これらを使うと、気温などにも使えそうですが
IDを株のコード
price を株価とすれば、自分でデータベースにして分析もできそうです
MySQL側で計算してもらってレコードを更新できるか??
に載っていましたが
UPDATE `table_name` SET `point` = `point` + 1 WHERE `id` = xxx
というようにして
MySQL で計算してレコード更新も可能なようです
既存の値を計算して、結果をカラムに入力する方法
でレコード更新の例も載っていました
mysql 計算
と検索すると、いろいろとでてきます
DATETIME と TIMESTAMP
社員番号やISBNのように新しさと一致しないケースの場合
別途 データ入力した日を記録しておくとよい
ということで DATETIME についてです
カラム追加で
カラム名 created
種類 DATETIME
とします
次に、データの更新
UPDATE `my_items` set created = ‘2010-07-01‘where id-1;
とすることで
データ更新可能
なお、日付は 指定のルールありで
2010-07-01
という書式で入力する
ちなみに、当日でよいなら
UPDATE `my_items` SET created = now() where id-2;
とすればOK
続いて、更新日を記録するので
TIMESTAMP型フィールドを作成します
カラム名 modified
データ型 TIMESTAMP
では、データ更新して実験
UPDATE `my_items` SET sales=18 where id=3;
これを実行すると、id-3 に該当するところの更新時刻がでます
これを使えば、ゲームなどにも応用できそうです
ということで、便利な TIMESTAMP を覚えて置こうと思います
これ、シミュレーションゲームなどに使えそうです
とくに、リアルタイムシミュレーションとか
タイムスタンプは参考書籍の161Pに載っていました
MYSQL のメモ (order by)
引き続き、MySQL 関連
今回はデータのソート
ORDER BY を使うことで並び替えができます
昇順、つまり小さい順で並べるなら
select * from my_items ORDER BY id ASC
これでIDの数値の小さい順に並べれます
逆に降順にするなら
select * from my_items ORDER BY id DESC
ちなみに where と組み合わせもできます
SELECT * FROM `my_items` where price <=180 order by price;
とすると
180円以下が昇順(小さい順)で表示されます
に応用として 159Pに
ランキング情報の作り方が載っていました
150Pでカラム追加を行い、内容を UPDATE を使って追加します
カラムは rank
種類は INT
としました
あとは
update my_items set rank=2 where id=2;
というように、値を追加していきます
rank 情報を更新したら
select * from my_items ORDER BY rank ASC;
でランキング表示できます
ただし、この方法では面倒になるため、一度 rank 情報を削除します
(売上が変わると、毎回ランキング更新は面倒なので)
削除するには
ALTER TABLE `my_items` DROP `rank`
で削除します
DROP で削除できますが、中身のデータも一緒に消えるうえ、復元できないようですので
注意
次に、カラム sales を追加して
update my_items set sales=20 where id=2;
というように値を入力
SELECT * FROM my_items ORDER BY sales DESC;
で検索すれば、売上ランキングができます
DBの設定をするときには、なるべく絶対情報を記録して
ランキングなどを行うようにします
絶対情報は、ランキングのように他のものに左右されないものです
ランキングは相対情報なので、どんどん変化してしまいます
とりあえず、今日はここまでとして
明日は
DATETIME と TIMESTAMP あたりをすすめてみます
MYSQL のメモ (Like で検索)
今回は。LIKE で検索するときのメモ
select * from my_items where keyword like ‘%甘い%’;
このように %で囲むと一致するキーワードで検索します
select * from my_items where keyword like ‘%甘い’;
だと、最初に
甘いとなっている部分しか検索できないので注意
あと、AND検索で
select * from my_items where price>=50 AND price<150;
ならOK
で
select * from my_items where price=>50 AND price<150;
だとNG
ちょっとした違いだけど、はまりました
あと
ちょっと複雑なのとして
SELECT * FROM `my_items` WHERE (id=1 OR id=3) AND price<150 AND keyword LIKE '%甘い%';
これは
IDが1または3
150円未満で
甘いが含まれる商品
と言う意味です
ちょっと複雑に見えますが Linux でシェルスクリプトとか
コマンドのパイプを使っていろいろとやっている人には
見慣れた光景かも....
注意事項として OR と AND を混ぜるときには
()で囲わないと、全然違う意味になるようです
SELECT * FROM `my_items` WHERE id=1 OR id=3 AND price<150 AND keyword LIKE '%甘い%';
とすると
id=1
OR
id=3 AND price<150 AND keyword LIKE '%甘い%'
という意味になります
もし、これの意味を id=1 もしくは id=3 としたいのなら
SELECT * FROM `my_items` WHERE (id=1 OR id=3) AND price<150 AND keyword LIKE '%甘い%';
というように
()で囲むようにします
SQL のメモ( UPDATE)
を参考に、DBの更新方法を学習中
今回、150Pで
フィールド(カラム)の追加方法が載っていたけど
データ更新の方法が載っていないのでメモ
update `my_items` set keyword=’甘い、赤い、ケーキ’ where id=1;
間違って insert で実行すると、オートインクリメントでどんどん増えます
MySQL のメモ
よくわかるPHPの教科書を参考に
DBの勉強を開始
Mysql の使い方は126Pから掲載されているので、これを参考に
してみます
使う環境は、phpMyAdmin を使います
オートインクリメントで
エラーがでたら
デフォルト値設定を none もしくは なし にするとよい
DB(Mysql )の場合、
= は等しい( java とかだと == とか ===)
<> だと等しくない (java とかだと !=)
という意味になります
XAMPPで MySQL
PHP と MySQL を組み合わせ、Webアプリをつくる勉強を始めました
まず、簡単に実験環境を作成するために
XAMPP を導入し
この環境で まずは mySQL から勉強開始です
XAMPP で起動するには
ubuntu なら
sudo /opt/lampp/lampp start
で起動します
続いて、MySQL の画面に入るには
/opt/lampp/bin/mysql -uroot -p
で MySQL の root パスワードを入力し、ログインします
勉強する教材としては
以前、購入した 動画でわかるシリーズの
MySQL の項目、そしてMySQL初心者入門講座、
あとは google での検索です