0

私は自分のウェブサイト用に非常に小さなフォーラムを書いています..私は本当にvbや他のフォーラムシステムを使いたくありませんでした.

それで

topics ( title , id )
posts  ( text , id , topic_id )

特定のユーザーのすべてのエントリ (投稿) を表示するページがあります

各ユーザー投稿のこのページでは、トピックの名前とその投稿の短い要約を表示します

ここに問題があります

トピック名をクリックすると..トピックの最初のページに行きたくない。その特定の投稿を含む正確なページが必要です。

だから私は投稿IDを取得します(666としましょう)それを使用してトピック情報を取得できます(タイトルとしましょうtopic A:)

だから私は投稿の合計数を得ることができますtopic A

まあ言ってみれば

$total_posts_intopic = 250 ;
$per_page            = 15 ;

今必要なのはpost #666、ページ番号を把握するため のオフセットだけです

#666どうすればポスト間のポストのオフセットを取得できtopic Aますか?

または、これを行う簡単な方法はありますか?

注:投稿番号666は、含まれていないすべてのトピックで全体で666の投稿であることを意味しますtopic A

4

1 に答える 1

0

完全なデモについては、この SQL Fiddleを参照してください。

私が使用した(あなたの例に合わせた)クエリは以下のとおりです。アイデアは、topic_id(私が現在持っている場所topic_id = 1)と投稿id(私が現在持っている場所)に記入することですid = 666。結果は、指定されたトピック内の指定された投稿の位置を示す数値になります。

ページ番号を決定するには、次を使用できます。

$pageNumber = floor(($queryResult - 1) / $postsPerPage);

クエリ:

SELECT
  currentCount
FROM
  (
    SELECT
      id,
      @counter := @counter + 1 AS currentCount
    FROM
      posts,
      (SELECT @counter := 0) AS countTable
     WHERE
       topic_id = 1
  ) AS associatedCountTable
WHERE
  id = 666;

クエリは次のように機能します。

  • posts テーブルは、カウンター変数でクロス結合されます。これが機能するのは0、MySQL が「作成」するcountTableとき (FROM句を確認するとき) に変数が設定され、その変数が行が選択されるたびに 1 ずつ増加するためです (SELECT各結果行に対して句が「実行」されるため)。
  • WHERE句 (正しいトピックを選択する) は句の前に「実行」されるためSELECT、関心のあるトピックの行のみがカウンターの増加を取得します。
  • associatedCountTable前の手順の結果、選択したトピックの各投稿の行を含む新しいテーブルが作成されます。各行idの最初の列には投稿があり、2 番目の列には という名前の単純に増加するカウンターがありますcurrentCount
  • 最後の句は上記のテーブルを取得し、興味のある投稿WHEREの行のカウンター列を選択します(例では)。id666
于 2013-08-21T01:04:00.190 に答える