ブロックに最新記事1ユーザー1記事で制御したい


投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2009/7/14 16:53
d3diaryありがと? 

d3diaryありがと? 感謝です。

ブロックの最新記事表示で、最新記事何件だけではなく、1ユーザー最大表示件数みたいなものを付けていただけないでしょうか?

例で言うなら

 日記全体の更新状況
  2009-07-19 Aさん
  2009-07-18 Aさん
  2009-07-17 Bさん
  2009-07-16 Cさん
  2009-07-15 Aさん
  2009-07-11 Dさん
  2009-07-05 Eさん
  2009-07-02 Fさん

 ブック設定:表示件数4、1ユーザー1件
 の時、ブロック表示は

  2009-07-19 Aさん
  2009-07-17 Bさん
  2009-07-16 Cさん
  2009-07-11 Dさん

ためしに自分で挑戦しましたが・・・
b_diarylist.phpの118行目あたりのSQL文を直せばいいのかな?と言う点までは把握できたのですが、MSSQLしか使った事がないので、mySQLでの書き方がわからずはまっています。

すみませんが、アドバイスまたは機能追加をお願いします。

m(__)m

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/7/14 17:54 | 最終変更
なーお  長老   投稿数: 1573

d3diaryありがと?さん、こんにちは。

日記リストブロックの個人別最大表示件数の設定ということで、現状はソースの一部を変更すれば可能です。

b_diarylist.php の 130行目付近

1
if($usrcnt[$dbdat['uid']]<=3){

これは一人4件のはずですので、

1
if($usrcnt[$dbdat['uid']]<1){

こうすれば一人1件になると思います。
もしならなかったら、数値を変えるなりして試してみてください。

なお、ブロックオプションの最大表示件数の設定は、大きめにしておかないと、全員の分が出ない場合もあると思います。

次のバージョンあたりで、オプション設定が可能なように検討してみます。 :-)

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/7/16 14:29
なーお  長老   投稿数: 1573

本件、d3diary-ver0.04にて組み込みました。 :-)

また、外部ブログと内部ブログを合わせた件数で規制をかけるように変更しました。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/7/21 13:32
d3diaryありがと? 

対応ありがとうございます。

すこし残念なのは、
表示件数5件、1ユーザー1件と設定した場合、
必ず表示件数が5件になるわけでは無いと言う
点です。

 日記全体の更新状況
  2009-07-19 Aさん
  2009-07-18 Aさん
  2009-07-17 Bさん
  2009-07-16 Cさん
  2009-07-15 Aさん
  2009-07-11 Dさん
  2009-07-05 Eさん
  2009-07-02 Fさん

 ブック設定:表示件数5、1ユーザー1件
 の時、ブロック表示は

  2009-07-19 Aさん
  2009-07-17 Bさん
  2009-07-16 Cさん
  2009-07-11 Dさん
  2009-07-05 Eさん

になって欲しいのに・・・
  2009-07-19 Aさん
  2009-07-17 Bさん
  2009-07-16 Cさん

になっている気がします。

あと、
内部公開、外部公開に関係なく表示件数はキープして欲しいのですが。。。
(投稿者数が指定ユーザー数以下の場合はしかたがない)

すみません、要求ばかりで・・・ m(__)m

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/7/21 21:29 | 最終変更
なーお  長老   投稿数: 1573

d3diaryありがと?さん、こんにちは。

ご指摘の事象については、今回のバージョンアップの時に どうしようか悩んだのですが、要望次第かな? ということで現状仕様としてあります。(SQLでテーブルから検索する件数を現状は最大件数設定数分取得して表示不可の記事を消去)

なにぶん、XSNSやmyfriends連携での閲覧権限制御や、外部ブログとの混合表示など、SQLで取得後に判定することが多いため、致し方ないという判断です。

この件数を完全に正しくするのはコストがかかりすぎますし速度的にも問題になりそうですので、次なる手としては、SQLでテーブルから何件か余計に取得しておいてから、表示不可を消去してゆくという考えです。

これでしたら、単純な変更でできますが、ではあと何件余分に検索するか、ということが課題になります。 増量が少ないと、表示件数が多い場合にやはり同様の問題が出ますし、 増量が多すぎるとメモリを多消費するだけです。

次のバージョンで何かしらの形で取り込もうと思いますが、ご意見ありましたらどうぞお願いします。

私の考えとしては、 設定された最大件数=n1とおくと、SQLで検索する件数は、
n1< 10 のとき、n=2 x n1
n1>=10 のとき、n=10 + n1

といった具合かな。。 なんて考えています。 :-D

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/7/22 20:06
d3diaryありがと? 

おせわになります。 m(__)m

私が思ったのは、SQL文で解決させる方法です。

次の開発修正に繋がればと思い、
MSSQLしかわからないので、と、言うかこれでイイのか?と言うSQL文ですが・・・
投稿します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Select Top n                                                -- 表示件数(n件分だけ取得)
  *                                                         -- 記事取得
From UserTable(nolock)                                      -- XoopsのUsersテーブル
Inner Join DiaryTable(nolock)                               -- d3diaryの記事テーブル
      On  DiaryTable.uid = UserTable.uid                    -- ユーザーとの紐付け
Where
   DiaryTable.bid = (                                       -- 1ユーザーに対する表示記事を特定させる
                      Select Top m                          -- 1ユーザーの表示件数(m件分だけ取得)
                           DiaryTable.uid
                        ,  DiaryTable.bid
                      From DiaryTable(nolock)
                      Where
                           DiaryTable.uid = UserTable.uid
                      Order by
                           DiaryTable.bid Desc
                    )
Order by
     DiaryTable.Date Desc                                   -- 全体を投稿日の降順に並び替え

何かの役に立てば幸いです。 m(__)m
すみません m(__)m

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/7/22 22:59 | 最終変更
なーお  長老   投稿数: 1573

d3diaryありがと? さん、こんにちは。

SQL文まで考えていただき、ありがとうございます。 :-)

ただ残念ながら、サブクエリが使えるのはMySQL4.1以上でして、minidiaryからのインポートを考えると、MySQL4.0.xでも使えるようにしておきたいところです。 この機能のためだけに、MySQL4.1以上必須とするのも気が引けます。

サブクエリではなく、複数回のクエリに分割してしまう手もあるのですが、これもコスト(負荷)増方向ですので、minidiaryからのバージョンアップ時の体感速度をあまり遅くしたくないので、特にTOPページに配置することの多いこのブロックは慎重に検討すべきと考えています。

また、実際にはcategoryテーブルconfigテーブルも結合してますし、外部ブログも別SQLクエリで取得して配列をマージしてからソートしてますので、単純な話ではありません。

もう少し検討はしてみますけれども、あまり期待しないでください。 たぶん、基本的には http://www.naaon.com/modules/d3forum/index.php?topic_id=1001#post_id4024 の方法になると思います。

では。

投票数:0 平均点:0.00
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文
  条件検索へ