0

これまでのところ、これは私の Categories_model です:

<?php
class Categories_model extends CI_Model {

    public function __construct() {
        $this->load->database();
    }

    public function get_categories($parent = NULL) {
        $this->db->from('categories')->where('parent', $parent)->order_by('position');
        $query = $this->db->get();
        return $query->result_array();  
    }

}

SQL 構造:

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `parent` int(11) unsigned DEFAULT NULL,
  `title` varchar(100) NOT NULL,
  `description` text NOT NULL,
  `position` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;



CREATE TABLE IF NOT EXISTS `posts` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `tid` int(11) unsigned NOT NULL,
  `title` varchar(100) NOT NULL,
  `body` text NOT NULL,
  `created` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



CREATE TABLE IF NOT EXISTS `threads` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `cid` int(11) unsigned NOT NULL,
  `title` varchar(100) NOT NULL,
  `body` text NOT NULL,
  `created` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

すべてのカテゴリ/サブカテゴリを表示するビューをロードする前のコントローラー:

$data['categories'] = $this->categories_model->get_categories();
$forum = array();

foreach ($data['categories'] as $category) {
    $forum[$category['id']] = $this->categories_model->get_categories($category['id']);
}

$data['subcategories'] = $forum;

$this->template
        ->title('Forum')
        ->build('home', $data);

ホームページに表示されるすべての「サブカテゴリ」で、最新のスレッドとスレッドへの返信を取得したい。しかし、それを行う方法がよくわかりません.メソッドまたはSQLはどのように見えるでしょうか?現在のコードのどこに実装しますか?

基本的:

フォーラム サブカテゴリ (最新の投稿) カテゴリ 2 (スレッド 2) リンク リンク (最新の返信に移動)

私が達成しようとしていることですが、それを行う方法がわかりません。

(表示ページ)

        <table class="tborder" width="100%" cellspacing="1" cellpadding="6" border="0" align="center">
            <thead>
                <tr align="center">
                    <td class="thead">&nbsp;</td>
                    <td class="thead" width="100%" align="left">Forum</td>
                    <td class="thead">Senaste inlägg</td>
                    <td class="thead">Ämnen</td>
                    <td class="thead">Inlägg</td>
                </tr>
            </thead>
<?php
foreach ($categories as $row) {
?>
            <tbody>
                <tr>
                    <td class="tcat" colspan="5">
                        <a href="forumdisplay.php?f=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a>
                    </td>
                </tr>
            </tbody>
<?php
    foreach ($subcategories[$row['id']] as $sub_row) {
?>
            <tbody>
                <tr align="center">
                    <td class="alt2">
                        Ikon
                    </td>
                    <td id="f<?php echo $sub_row['id']; ?>" class="alt1Active" align="left">
                        <div>
                            <a href="forumdisplay.php?f=<?php echo $sub_row['id']; ?>">
                                <strong><?php echo $sub_row['title']; ?></strong>
                            </a>
                            <span class="smallfont">(0&nbsp;besökare)</span>
                        </div>
                        <div class="smallfont"><?php echo $sub_row['description']; ?></div>
                    </td>
                    <td class="alt2">
                        <div class="smallfont" align="left">
                            <div>
                                <span style="white-space:nowrap">
                                    <img class="inlineimg" border="0" alt="" src="images/icons/icon1.gif">
                                    <a title="Gå till det första olästa inlägget i ämnet 'Ämne 1'" style="white-space:nowrap" href="#">
                                        <strong>Ämne 1</strong>
                                    </a>
                                </span>
                            </div>
                            <div style="white-space:nowrap">
                                av
                                <a rel="nofollow" href="#">Medlem</a>
                            </div>
                            <div align="right" style="white-space:nowrap">
                                0000-00-00
                                <span class="time">00:00</span>
                                <a href="#">
                                    <img class="inlineimg" border="0" alt="Gå till det senaste inlägget" src="#" title="Gå till det senaste inlägget">
                                </a>
                            </div>
                        </div>
                    </td>
                    <td class="alt1">0</td>
                    <td class="alt2">0</td>
                </tr>
            </tbody>
<?php
    }
}
?>
        </table>
4

2 に答える 2

0

最新の投稿を取得しています

このために、次のようにデータベースにクエリを実行します: order DESCbyidおよび retrieve id。新しい行を挿入しているので、id意志auto_incrementとあなたがする必要があるのは、DESC順番を整えることだけです。

<?php
// This is a model
public function getPosts(){
  $this->db->order_by('id', 'DESC');
  $q = $this->db->get('posts');

  //Make sure we returned something.
  if($q->num_rows() > 0){
    return $q->result();
  }else{
    return false;
  }
}

最新のカテゴリを取得しています

このために、last_postedフィールド を追加し、投稿またはカテゴリを更新するときにlast_posted int(11) unsigned NOT NULL使用します。time()次に、それに基づいてフェッチしますlast_posted

<?php
// This is a model - get latest category
public function getLastPostedCategories(){
  $this->db->order_by('last_posted', 'DESC');
  $q = $this->db->get('categories');

  //Make sure we returned something.
  if($q->num_rows() > 0){
    return $q->result();
  }else{
    return false;
  }
}

カテゴリの更新

このために、新しい投稿を挿入するクエリと、選択したカテゴリを更新するクエリの 2 つのクエリを実行します。カテゴリの更新部分のみを示しています。

<?php
// this is a model - add the last_posted timestamp to a category
public function updatePostDate($cid){
  // i like to check to make sure, $cid is set.. you could do this in the controller too.
  if($cid){
    $this->db->where('id', $cid);
    $this->db->update('categories', array( 'last_posted' => time() ));
    // Make sure we updated the category
    if($this->db->affected_rows() > 0){
      return true;
    }else{
      return false;
    }
  }else{
    return false;
  }
}
于 2012-04-23T13:31:44.120 に答える
0

テーブル スレッドに last_post_time という追加のフィールドを作成します。新しい投稿が作成されるたびに、このフィールドが更新されます。これは通常の形式ではありませんが、フォーラム アプリケーションとしては最も簡単です。

于 2012-04-23T12:27:30.707 に答える