2008/06/22(日)
CakePHP といえば、このあいだ早速けつまづいたことがあったので、書き留めておく。
あるフィールドの値を重複なしですべてリスト化したかったのだが、
$keyLists = array();
$SQLStr = 'SELECT DISTINCT column FROM dbTables ORDER BY forSortColumn ASC';
if ($Res = mysql_query($SQLStr)) {
while ($Row = mysql_fetch_row($Res)) {
$keyLists[] = $Row[0];
}
}
これを、findAll() とかでできるかと思ったら、DISTINCT をどう指定していいのかわからなくて、結局上記コードのままになっている。で、これをメソッドとしてモデルに追加したのだが……こういう場合、これで正解? それとも別の手がある?
追記
自前のクエリを発行する場合は query() が使えるということがわかった。これならコントローラーで気軽に(?)使える。この場合、返ってくるのはCakePHPモデルの他のAPIを使った時と同様の構造を持つ配列。
ただ、これを使用した場合の新たな疑問は、DBテーブル名にプレフィックスを付加している場合、他のAPIではプレフィックスを意識せずに使えるけれど、query() の場合は意識しないといけないらしい、ということ。
ビュー内で使用する時、常にこのプレフィックスを付けて($Variable['PreFix_Table']['Column'] とか)呼び出すのは、何だかちょっと気持ち悪い感じがする……。統一して $Variable['Table']['Column'] のように使いたい場合はどうすれば?
というわけで、それが解決するまでは、自前メソッドのままの方が使いやすいので、query() の使用は保留。
さらに追記── AS の使用 (080701)
もしかしたら、下記でいけるかもしれない。未確認。そのうち試してみよう。
$this->User->query('SELECT DISTINCT column FROM prefix_users AS User ORDER BY forSortColumn ASC');
カテゴリー:
DB, FrameWork
|
タグ: CakePHP, MySQL
Tail-Lagoon @ 15:39
|
PageUp
コメント (0)
2008/03/18(火)

-
ログイン
mysql -u USERNAME -p;
ユーザ名 USERNAME でパスワードオプション付きでログイン
-
データベース作成
create database DB-NAME character set utf8;
DB-NAME というデータベースを、使用する文字コード UTF-8 と指定して作成
-
データベース削除
drop database DB-NAME;
DB-NAME というデータベースを削除
-
データベースの一覧
show databases;
-
データベースの選択
use DB-NAME;
-
TABLE情報表示
show table status;
テーブルの型などが知りたい場合もこれで分る
-
TABLE作成時のクエリ表示
show create table TBL-NAME;
新たにテーブルを作る時や、同じカラムを持つテーブルを作りたい時など参考になる
-
カラム情報表示
show columns from TBL-NAME;
-
全データ表示
select * from TBL-NAME;
-
新規レコード作成
insert into TBL-NAME set ID=0,TITLE='あああ',BODY='いいい';
(ID, TITLE, BODY という名の各カラムがあると想定)
-
レコード削除
delete from TBL-NAME where ID=0;
ID の値が 0 のレコードを消去
-
キーワードを重複なしで表示
select distinct KEYWORDS, KANA from TBL-NAME order by KANA;
KEYWORDS カラムの値と KANA カラムの値を重複なしで表示し、表示順は KANA カラムの値でソート
-
オートインクリメント(自動連番)カラムの値を振り直す場合、下記の手順で実行する(例では ID カラムがこれに該当)
-
ID カラムを削除
alter table TBL-NAME drop column ID;
オートインクリメント・カラムは各テーブルに一つだけしか作成できないので、連番を振り直す場合は、一旦カラムを削除して新たに作り直す必要がある
-
新規 ID カラム(整数型・自動連番)を追加
alter table TBL-NAME add ID int(5) primary key not null auto_increment first;
primary key は重複を許さない主キーのことであり、NOT NULL でなければならない
-
カラム名を変更する
alter table TBL-NAME change OldColumnName NewColmunName DataType;
(データタイプについては調べること)
-
レコードを変更する
update TBL-NAME set ColumnName='New Data' [, ColumnName='New Data'] where … ;
(where 以下の条件文を指定しない場合は、全レコードが書き換えられる)
カテゴリー:
DB, Reference
|
タグ: MySQL
Tail-Lagoon @ 17:54
|
PageUp
コメント (0)