ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2023年2月28日火曜日

MySQLユーザー変数を使ったビューテーブルを作成でき・・・

View tables cannot be created with user variables in MySQL. 

https://dev.mysql.com/doc/refman/8.0/ja/create-view.html

SELECT ステートメントは、システム変数またはユーザー定義変数を参照できません。

できないのですね。。。


CakePHP4
Cake\ORM\Table::beforeFind()  こちらを使うかな


2013年7月25日木曜日

cakephp と MySQL の tinyint(1)

MySQL の tinyint(1) にデータを登録するとき、
$model->save() すると、0 以外は 1 で登録される。

データ読み込みのテストで、直接 2 をセットし、findすると当該フィールド値が 1 となっている。

CakePHPの仕様とのこと。
以前にもハマって思い出したので備忘録として。

2013年4月9日火曜日

MySQL 文字コード

MySQL で使用する文字コードですが、検索条件に

WHERE name COLLATE utf8_unicode_ci LIKE '%コード%'

とした場合、「コード」「コート」などがヒットします。


WHERE name COLLATE utf8_general_ci LIKE '%コード%'

とした場合、「コート」はヒットしなくなります。


どちらがどうということではなくて、要件によりますね。
全角・半角・ひらがな・カタカナ・大文字・小文字を同一視して検索したいときは
utf8_unicode_ci
が便利ですし・・・


2013年1月6日日曜日

CakePHP2 同じフィールドをDB検索条件に指定するとき

DBを検索するとき検索条件で、以下のような指定(SQLを生成)をしたいときがあります。
WHERE foo <> 1 AND foo <> 2 …(a)
CakePHP2のfind()メソッドを使用するとき、こんな感じで条件を書いて
$conditions = array('foo <> ' => 1, 'foo <> ' => 2);
どうも思った結果が取れない???
生成されたSQLを確認すると、
WHERE foo <> 2
となっています。

どうやら同じフィールドを指定するのはうまくいかないみたいです。
で、以下のようにしてみました。
$conditions = array('foo NOT ' => (1, 2));
こうすると IN句を生成します。こんなふうに、
WHERE NOT IN (1, 2) …(b)
これで思った結果が取得できました。

先に(a)を思い浮かべてしまうのがダメだったみたいですね(^^;


2012年11月8日木曜日

cakePHP2 「設定より規約」

CakePHP2です。

「設定より規約」

"convention over configuration"

なるほど、わかります。
これにピッタリハマる案件は幸せです。保守も楽チン???

さて、既存システムのリプレース、やり方はいろいろとあると思います。

予算などなどいろいろな制約の都合上、既存システムからの移行でDBはそのままでいくぜ。
ということもあると思います。結構あると思います。

こんなとき、この「規約」がフレームワークを使用する上でのメリットと、まさにトレードオフになったりならなかったり。

親子関係を持つレコードセットを取得するとき、規約に則っていれば、

find('threaded',…)

などで簡単に取得できます。(これスゴイ!)
がしかし、既存DBレイアウトのままのときはそうもいきません。

join して、find('all', …) で取得したレコードセットを親子関係になるように整形する必要があります。
 ここのコストが結構なものだったりします。
どうせビューでforeachするからそこでやっちゃえよ。というのもわかります。
でもモデルで親子関係の配列を返してやればメンテナンスも楽チンなのです。

実装するとき、SQLがスッと頭に浮かぶのだけれども、せっかくのフレームワーク、ここは「規約」にのっとって、fields/conditions/join/order などを find()メソッドに渡すように書こうとすると結構時間がかかります。(慣れですかね。)

求めるSQL文は頭にあって、それを生成するような、「規約」にのっとった書き方をするのは、ううむ、と思うこともあります。
生成されるのは、結局SQL文です。なので素のSQLをイメージできなきゃ、「規約」も絵に書いた餅ということですね。


2012年10月16日火曜日

xampp入替え

新たにCakePHP2系の環境を作るためにxamppを新しくしてみよう!と思ってハマりました。

新しいxamppは、1.8.1で、古いヤツはPHPのバージョンなどの都合上1.7.1。

1.7.1は、vmware環境(CentOS5)へ移行したためあまり使っていないのですが。。。

今回新しく、c:\xampp1.8.1へインストールしたのですがApacheが起動しません。

いろいろ調べてみると、xamppアンインストールする前に、ApacheとMySQLをアンインストールしておく必要があるとのこと。

●apache
httpd -k uninstall


●MySQL
c:\sc.exe delete mysql


vmwareのサスペンドがサクサクならそちらに環境作るのだけれども。