cakephp1.1のmodelのfindAll関数のfields部分の引数に、

DATE_FORMATなどMySQLの関数を書く方法を教えてください。

どうもtable名が「`Meshi`.`DATE_FORMAT(」のように入ってしまい、
「Unknown column 'Meshi.DATE_FORMAT(date_time_original' in 'field list'」
なようです。


■失敗
$fields = 'DISTINCT DATE_FORMAT(date_time_original, "%Y-%m-%d") date_time_originalYMD';

■成功(だがトリッキー)
$fields = array('DISTINCT DATE_FORMAT(date_time_original, "%Y-%m-%d") date_time_originalYMD');

http://pkms.blog77.fc2.com/blog-entry-2.html
を参照した。

■はき出されるSQL
SELECT DISTINCT `Meshi`.`DATE_FORMAT(date_time_original`, `Meshi`.`"%Y-%m-%d") date_time_originalYMD` FROM `meshis` AS `Meshi` WHERE 1 = 1 ORDER BY `date_time_original` DESC LIMIT 60, 20

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/01/02 18:30:21
  • 終了:2008/01/09 18:35:04

回答(2件)

id:t_shiono No.1

t_shiono回答回数256ベストアンサー獲得回数222008/01/02 20:36:51

ポイント35pt

直接的な回答ではないので、ポイント不要です。

Googleなどで検索はされていると思うので、ご存知とは思いますが、クエリーで対処することよりも、afterFindでとってきた後に書加工するのが一番単純なようです。

http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=902&forum...

念のため。

id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542008/01/03 15:56:46

ポイント35pt

関数を、表名や別名で修飾するという使い方はありません。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.4 日付と時刻関数

`Meshi`.`DATE_FORMAT(date_time_original`, `Meshi`.`"%Y-%m-%d")

→DATE_FORMAT関数をMeshiで修飾するのは誤り。書式編集文字を修飾するのも誤り。

DATE_FORMAT(meshi.列名,書式) という形式にする必要がある。


つまりSQLとしては、以下のようになります。

SELECT DISTINCT `Meshi`.`DATE_FORMAT(date_time_original`, `Meshi`.`"%Y-%m-%d") date_time_originalYMD` FROM `meshis` AS `Meshi` WHERE 1 = 1 ORDER BY `date_time_original` DESC LIMIT 60, 20

SELECT
  DISTINCT
   DATE_FORMAT(`Meshi`.`date_time_original`, "%Y-%m-%d") date_time_originalYMD`
 FROM `meshis` AS `Meshi` 
 WHERE 1 = 1
 ORDER BY `date_time_original` DESC LIMIT 60, 20

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません