お疲れ様です。
いつもお世話になっております。
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の書き方など何かございましたらご指示いただければと思います。
No.1ベストアンサー
- 回答日時:
その設計ですと、私だったら親記事とレスは別クエリにしますね。
joinしてしまうと親記事の内容が全レコードに入ってきてしまいますし
結合するにしてもテーブルが微妙に違うようですし。
なにより、クエリを複雑化すると後から読み返したとき混乱しますな・・・
ひとつのクエリで取得するのであれば、子記事と親記事を同一のテーブルにいれて
親記事かどうかのフラグを持たせる設計にしたほうが良いかな、と。
親記事のみ引っ張る場合がある、ならばテーブルは分けたほうが良いでしょうけど。
それであれば親と子は完全に別オブジェクトとして考えてクエリを分けたほうが良いと思いますよ。
なるほどー!
参考になります。
実際でかいBBSでもないんで、クエリ1個に神経質になることはないのですが、記事レスひとつのテーブルってのもかなり有力ですね!
もともと記事とレスは分けるもんだという先入観のもとやってきたので、ちょっと考え直してみます!
ありがとうございましたー。
No.3
- 回答日時:
蛇足の蛇足ですが^^;
>親記事IDが特定の値(0とかマイナスとか)の場合は、
mysqlの場合ですとauto_incrementを使用すると思いますが、
これの初期値は大概が1なので「親記事は1」といった前提で開発する必要があります。
子記事の番号を出したい場合は1引かないとちょっとアレゲに見えてしまうことに注意ですね。
No.2
- 回答日時:
私ならクエリ2つ(親記事用、レス用)にします。
無理に一つにしても何もメリット無いような。既に遅いかもしれませんが(笑、私なら記事テーブルとレステーブルを同一にしますかね。こんな感じでしょうか。親記事IDが特定の値(0とかマイナスとか)の場合は、それが本当の親記事(ルート)と言う感じですね。
ID 親記事ID 内容....
こうしておけばとりあえずテーブルは一つですみますので、最新の記事&レス何件、と言うような表示は一発ですみますので。
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- その他(社会・学校・職場) 5chまとめブログの著作権について 1 2022/04/26 17:45
- MySQL SQLで日付別のIDを生成するには 3 2022/10/09 10:34
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- PHP PHP MySql ページング 2 2022/09/20 06:38
- その他(OS) Ubuntuに仮想環境いれて古いwindows動かしたいんですが、OSイメージ無料で手に入りますか? 2 2023/03/09 23:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access vbaで重複レコードの削...
-
Access2013の式ビルダーでユー...
-
sql文で削除クエリを書く
-
重複した複数のレコードを1レ...
-
データがあれば○○なければのSQL
-
ルックアップフィールドについて
-
DAOでSQLServerに接続し、LeftJ...
-
別のaccessファイルからデータ...
-
アクセスで定数を利用したい。
-
ACCESS VBAでテーブル内の特定...
-
「ご処理進めて頂きますようお...
-
CloseとDisposeの違い
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
VBAにてメッセージボックスを最...
-
エクセルVBAで、MsgBox やInput...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
【access】複数のフィールドの...
-
ACCESS VBAでテーブル内の特定...
-
Access vbaで重複レコードの削...
-
ACCESS DCOUNTの抽出条件について
-
Accessで縦と横を入れ替えたい
-
VBAでテーブル名とカラム名を動...
-
DataGridViewで複数条件の抽出...
-
Access から Excelのシートをイ...
-
重複した複数のレコードを1レ...
-
DAOでSQLServerに接続し、LeftJ...
-
SQLServer→Access インポート
-
ACCESSで実行時エラー3008
-
sql文で削除クエリを書く
-
別のaccessファイルからデータ...
-
access追加クエリーでform入力...
-
抽出条件でデータ型が一致しま...
-
【PHP/MySQL】コード上で生成...
-
Accessリンクするテーブルが見...
-
ACCESSで購入回数を表示する方...
おすすめ情報