2011-11-07 16 views
0

私はこれをかなり新しくしているので、これをできるだけ簡潔に説明しようとします。複数のmySQLテーブルからデータを取得する

私は3つのテーブルを持っています:記事;カテゴリ; articles_to_categories

完全な記事の種類は以下のとおりです。関数getByIdは私がカテゴリを引き抜こうとしているところです。

<?php 

/** 
* Class to handle articles 
*/ 

class Article 
{ 

    // Properties 

    /** 
    * @var int The article ID from the database 
    */ 
    public $id = null; 

    /** 
    * @var int When the article was published 
    */ 
    public $publicationDate = null; 

    /** 
    * @var string Full title of the article 
    */ 
    public $title = null; 

    /** 
    * @var string A short summary of the article 
    */ 
    public $summary = null; 

    /** 
    * @var string The HTML content of the article 
    */ 
    public $content = null; 


    /** 
    * Sets the object's properties using the values in the supplied array 
    * 
    * @param assoc The property values 
    */ 

    public function __construct($data=array()) { 
    if (isset($data['article_id'])) $this->id = (int) $data['article_id']; 
    if (isset($data['publicationDate'])) $this->publicationDate = (int) $data['publicationDate']; 
    if (isset($data['title'])) $this->title = preg_replace ("/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['title']); 
    if (isset($data['summary'])) $this->summary = preg_replace ("/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['summary']); 
    if (isset($data['content'])) $this->content = $data['content']; 
    } 


    /** 
    * Sets the object's properties using the edit form post values in the supplied array 
    * 
    * @param assoc The form post values 
    */ 

    public function storeFormValues ($params) { 

    // Store all the parameters 
    $this->__construct($params); 

    // Parse and store the publication date 
    if (isset($params['publicationDate'])) { 
     $publicationDate = explode ('-', $params['publicationDate']); 

     if (count($publicationDate) == 3) { 
     list ($d, $m, $y) = $publicationDate; 
     $this->publicationDate = mktime (0, 0, 0, $m, $d, $y); 
     } 
    } 
    } 


    /** 
    * Returns an Article object matching the given article ID 
    * 
    * @param int The article ID 
    * @return Article|false The article object, or false if the record was not found or there was a problem 
    */ 

    public static function getById($id) { 
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $sql = "SELECT *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles WHERE article_id = :id"; 
    $st = $conn->prepare($sql); 
    $st->bindValue(":id", $id, PDO::PARAM_INT); 
    $st->execute(); 
    $row = $st->fetch(); 
    $conn = null; 
    if ($row) return new Article($row); 
    } 


    /** 
    * Returns all (or a range of) Article objects in the DB 
    * 
    * @param int Optional The number of rows to return (default=all) 
    * @param string Optional column by which to order the articles (default="publicationDate DESC") 
    * @return Array|false A two-element array : results => array, a list of Article objects; totalRows => Total number of articles 
    */ 

    public static function getList($numRows=1000000, $order="publicationDate DESC") { 
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles 
      ORDER BY " . mysql_escape_string($order) . " LIMIT :numRows"; 

    $st = $conn->prepare($sql); 
    $st->bindValue(":numRows", $numRows, PDO::PARAM_INT); 
    $st->execute(); 
    $list = array(); 

    while ($row = $st->fetch()) { 
     $article = new Article($row); 
     $list[] = $article; 
    } 

    // Now get the total number of articles that matched the criteria 
    $sql = "SELECT FOUND_ROWS() AS totalRows"; 
    $totalRows = $conn->query($sql)->fetch(); 
    $conn = null; 
    return (array ("results" => $list, "totalRows" => $totalRows[0])); 
    } 


    /** 
    * Inserts the current Article object into the database, and sets its ID property. 
    */ 

    public function insert() { 

    // Does the Article object already have an ID? 
    if (!is_null($this->id)) trigger_error ("Article::insert(): Attempt to insert an Article object that already has its ID property set (to $this->id).", E_USER_ERROR); 

    // Insert the Article 
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $sql = "INSERT INTO articles (publicationDate, title, summary, content) VALUES (FROM_UNIXTIME(:publicationDate), :title, :summary, :content)"; 



    //PDO prepare escapes string like mysql_real_escape_string 
    //PDO Allows you to enforce a datatypye ie. Sting, Integer etc 
    $st = $conn->prepare ($sql); 
    $st->bindValue(":publicationDate", $this->publicationDate, PDO::PARAM_INT); 
    $st->bindValue(":title", $this->title, PDO::PARAM_STR); 
    $st->bindValue(":summary", $this->summary, PDO::PARAM_STR); 
    $st->bindValue(":content", $this->content, PDO::PARAM_STR); 
    $st->execute(); 
    $this->id = $conn->lastInsertId(); 
    $conn = null; 
    } 


    /** 
    * Updates the current Article object in the database. 
    */ 

    public function update() { 

    // Does the Article object have an ID? 
    if (is_null($this->id)) trigger_error ("Article::update(): Attempt to update an Article object that does not have its ID property set.", E_USER_ERROR); 

    // Update the Article 
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $sql = "UPDATE articles SET publicationDate=FROM_UNIXTIME(:publicationDate), title=:title, summary=:summary, content=:content WHERE id = :id"; 
    $st = $conn->prepare ($sql); 
    $st->bindValue(":publicationDate", $this->publicationDate, PDO::PARAM_INT); 
    $st->bindValue(":title", $this->title, PDO::PARAM_STR); 
    $st->bindValue(":summary", $this->summary, PDO::PARAM_STR); 
    $st->bindValue(":content", $this->content, PDO::PARAM_STR); 
    $st->bindValue(":id", $this->id, PDO::PARAM_INT); 
    $st->execute(); 
    $conn = null; 
    } 


    /** 
    * Deletes the current Article object from the database. 
    */ 

    public function delete() { 

    // Does the Article object have an ID? 
    if (is_null($this->id)) trigger_error ("Article::delete(): Attempt to delete an Article object that does not have its ID property set.", E_USER_ERROR); 

    // Delete the Article 
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $st = $conn->prepare ("DELETE FROM articles WHERE id = :id LIMIT 1"); 
    $st->bindValue(":id", $this->id, PDO::PARAM_INT); 
    $st->execute(); 
    $conn = null; 
    } 

} 

?> 

私は何をする必要があることは記事がで複数のカテゴリをで出力されます。私は、この関数内で別のSQL文を作成しなければならないか、私は1つのステートメントでそれを行うことができます。

表/列概要: 記事 - ID、publicationDate、タイトル、概要、コンテンツ カテゴリ - ID、categoryTitle articles_to_categories - article_idには、私はこれが誰かが私に私を助けるためにのために十分な情報であると思います

をCATEGORY_ID方法。

ありがとうございました。

答えて

1

私はあなたのクラスを変更し、

public $categorie = null; //because you will add new column to table article 

を追加し、それに依存するすべてのコードを変更し、あなたのDBに列を追加すべきだと思います。 etc

関連する問題