PHP MySQL


掲示板を作成しています。

各掲示板のスレッドのID,タイトル、最終更新日は

bbsdata

というテーブルにデータを貯めています。

bbs.php?id=hatena

という引数でbbsdataのテーブルにhatenaというデータがIDのカラムに入っているレコードを引き出します。
次に各スレを格納した bbsdata2 というテーブルからIDが同じデータのカラムを検索、引き出します。

bbsdata2 には

ID|日付|スレ|ユーザーID

が格納されています。

で、今回の質問ですが、hogeというユーザーIDで今まで投稿されたことのないbbsdataに格納されている各掲示板スレッドのデータのみ表示させたいのですが、そのSQLを教えて下さい。

別々のテーブルに成るので複雑になると思うのですが、joinなどは使用しないで下さい。
あまりにもデータが多いので、サーバに負荷をかけない方法をお願いします。

回答の条件
  • 1人2回まで
  • 登録:2009/02/05 11:43:38
  • 終了:2009/02/12 11:45:02

回答(2件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/02/05 12:42:48

ポイント47pt

こんな感じのことでしょうか。

SELECT * from bbsdata WHERE ID NOT IN ( SELECT DISTINCT  ID FROM bbsdata2 WHERE ユーザID='hoge' );
id:esecua

動かないですねぇ。

2009/02/06 02:18:34
id:hijk05 No.2

hijk05回答回数1307ベストアンサー獲得回数232009/02/05 14:19:02

ポイント23pt

>負荷は大丈夫でしょうか?

IDというフィールドにインデックスを張っていたら大丈夫だと思いますよ。

  • id:Mook
    実際に実行計画等を見たわけではないので、無責任な発言になってしまいますが、
    JOIN に比べれば負荷は軽いかと思います。

    ただ、実際の負荷に関してはクエリ文だけでなく、DBの設定にも大きく依存しますので、
    負荷が深刻な問題であるなら、そちらをチューニングしたほうがよいかと思います。
    http://allabout.co.jp/internet/database/closeup/CU20040722A/

    根本的な問題ですが、MySQL のバージョンはいくつになるでしょうか。
    Ver4.0 以前であれば、サブクエリが使えないという問題もあります。

    また、それぞれのテーブルのデータ数等も提示されたほうが、適切な回答が得られるかと
    思います。

    どちらも数千というオーダーなら、最近のサーバスペックであれば気にしなくともよいと思います。
  • id:Mook
    MySQL のバージョンはいくつでしょうか。

    サブクエリは Ver 4.1 以降で有効です。

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

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

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

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