プロが教えるわが家の防犯対策術!

お疲れ様です。
いつもお世話になっております。

http://www3.rocketbbs.com/401/sample.html
こちらはロケットBBSなのですが、このような掲示板をPHPで製作中です。

DBはすでに組んであります。
キーになるのは
記事テーブル 記事ID
レステーブル レスID 記事ID

です。

当然ですが、記事ID1個に対して複数のレスIDがつきます。
これを1個のSQLで記事とレスを拾い、記事データの配列の中に、複数レスの配列をいれ、Smartyでループして表示。ということを考えています。

今行き詰ってるのが
Select 記事.*,レス.* FROM 記事 LEFT JOIN 記事.記事ID=レス.記事ID;

というSQLを組んでいますが、見たとおり、これでは1記事1レスで重複してしまっています。
GROUP BYで何とかならないかなぁとも考えているんですが、fetchで出したあと配列どうするんだ?という疑問も残ってまして・・・。

そもそも1つのクエリで、というのが間違ってるんでしょうか。

以下が環境です。
PHP 4.4.x
MySQL 5

上記を実現しているBBSサンプルスクリプトの場所とか、SQLの書き方など何かございましたらご指示いただければと思います。

A 回答 (3件)

その設計ですと、私だったら親記事とレスは別クエリにしますね。


joinしてしまうと親記事の内容が全レコードに入ってきてしまいますし
結合するにしてもテーブルが微妙に違うようですし。
なにより、クエリを複雑化すると後から読み返したとき混乱しますな・・・

ひとつのクエリで取得するのであれば、子記事と親記事を同一のテーブルにいれて
親記事かどうかのフラグを持たせる設計にしたほうが良いかな、と。

親記事のみ引っ張る場合がある、ならばテーブルは分けたほうが良いでしょうけど。
それであれば親と子は完全に別オブジェクトとして考えてクエリを分けたほうが良いと思いますよ。
    • good
    • 0
この回答へのお礼

なるほどー!
参考になります。

実際でかいBBSでもないんで、クエリ1個に神経質になることはないのですが、記事レスひとつのテーブルってのもかなり有力ですね!

もともと記事とレスは分けるもんだという先入観のもとやってきたので、ちょっと考え直してみます!
ありがとうございましたー。

お礼日時:2007/11/08 11:31

蛇足の蛇足ですが^^;


>親記事IDが特定の値(0とかマイナスとか)の場合は、
mysqlの場合ですとauto_incrementを使用すると思いますが、
これの初期値は大概が1なので「親記事は1」といった前提で開発する必要があります。
子記事の番号を出したい場合は1引かないとちょっとアレゲに見えてしまうことに注意ですね。
    • good
    • 0

私ならクエリ2つ(親記事用、レス用)にします。

無理に一つにしても何もメリット無いような。

既に遅いかもしれませんが(笑、私なら記事テーブルとレステーブルを同一にしますかね。こんな感じでしょうか。親記事IDが特定の値(0とかマイナスとか)の場合は、それが本当の親記事(ルート)と言う感じですね。
ID 親記事ID 内容....

こうしておけばとりあえずテーブルは一つですみますので、最新の記事&レス何件、と言うような表示は一発ですみますので。

参考まで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!