CakePHPを使って簡単な掲示板を開発しているのですが、トップページに
各トピックについたコメント数を表示させる方法で壁にぶち当たってしまっております。
データの取り出し方及び表示方法について教えて頂ければと思います。
DB構造(モデル)としては、
====================================
■掲示板(post.php)
テーブル:posts
id
title
contents
■コメント(comment.php)
テーブル:comments
id
post_id
comment
====================================
となっており、postsにhasMany、commentsにbelongsToで
アソシエーションを貼ってあります。
コントローラー(posts_controller.php)では、
====================================
$data = $this->Post->find('all',array('order' => array('Post.id' => 'desc')));
$this->set('data',$data);
====================================
という処理を行い、
ビュー(/posts/index.ctp)では、
====================================
foreach($data as $val){
echo "<tr>";
echo "<td><a href='{$val['Post']['id']}'>$val['Post']['title']</a></td>";
echo "</tr>";
}
====================================
としています。
これで、トップページに行くと掲示板トピックスのタイトルの
一覧は表示できるのですが、その横についたコメント数を表示
させたいのです。
例)掲示板のタイトルです(13)
上記のように(○)とさせたいのです。
コントローラーの所でallではなくcountにすることで件数を取りだす
ことができる所まではできるのですが、
$cnt = $this->Post->find('count',array('order' => array('Post.id' => 'desc')));
などとやっても本来取り出したいcommentsではなくpostsの件数を取りだす
ことになってしまっています。
また、hasManyを利用すると、
Array(
[0] => Array(
[post] => Array(
[id] => 1
[title] => 掲示板のタイトルです
[contents] => 掲示板の内容です
[comment] => Array(
[0] => Array(
[id] => 1
[post_id] => 1
[comment] => コメント1です。
[1] => Array(
[id] => 2
[post_id] => 1
[comment] => コメント2です。
・
・
・
となる為、ビューでの表示のさせ方にも困っております。
No.1
- 回答日時:
必要なsql文は以下
(ただし、MySQL, SQLiteを想定、これ以外のgroup化されてないカラムがあるとエラーになるデータベースシステムの時は、max(p.title) as title, max(p.contents) as contents, のようにする。)
select p.id, p.title, p.contents, count(c.post_id) as cnt
from posts as p left join comments as c on p.id=c.post_id
group by p.id order by p.id desc ;
これと同等のSQL文を作成してくれるようにfindの$paramを調整、
1.posts に $hasManyか$hasOneで Comment を指定すると、上記のleft join 条件になる
2.group指定、field指定を以下のように
$data = $this->Post->find('all'
, array('order' => array('Post.id' => 'desc')
, 'group'=>'Post.id'
, 'fields'=> array('Post.id', 'Post.title','Post.contents', 'count(Comment.post_id) as countComment')
));
→ 結果 $data[lineNo][modelName][columnName] の3次元配列
count関数カラムは、 modelName = 0, columnName = aliasName
この回答への補足
1054: Unknown column 'Comment.post_id' in 'field list'
と出てしまうようです。
ん~もう少し調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAについて
-
VBA初心者です。
-
PHPでMySQLデータを呼び出し、w...
-
checkboxクリック時、SQLを実行...
-
検索結果($_POST)が2ページ目...
-
python pandas 行ごとに列名(...
-
htmlとphpの分離
-
mysql_fetch_objectのエラー
-
MySQLでデータベースにデータin...
-
アポストロフィを含む文字列の追加
-
実行時エラー3131 FROM 句の構...
-
stringaddslashes 半角¥が消える
-
JAVA SQLServerException 列名 ...
-
MySQL5のデータを、SQL文を使い...
-
<VB.NET>INSERT文でDBにデータ...
-
ASP.net データベース操作について
-
PHPでフォームからデータDBに書...
-
MySQLのUPDATE実行結果を受け取...
-
VBA ACCESS SQL...
-
mysql_query等でレコード数を変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
php テーブルが作成できない
-
dbに登録したデータをphpのプル...
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
DBで検索結果に該当するデータ...
-
文字化けが解決できません。お...
-
SELECT結果から動的にコンボボ...
-
checkboxクリック時、SQLを実行...
-
PHPでMySQLデータを呼び出し、w...
-
while文の中にwhile文を書きた...
-
sortable ギブアップです…助け...
-
重複レコードをグループ化した...
-
PHP と MySQL でテーブルの行数...
-
PHPでMySQLのデータを2次元配...
-
mysql>PHPにデータ表示、10件ご...
-
PHPについてなのですが未定義の...
-
VBA初心者です。
-
ラジオボタンをループすること...
-
PHP+MySQLでの配列のinsert文に...
おすすめ情報