2015-04-23 58 views
0

我有2個表:加入2個表有相同的字段名稱

authors 
+-----------+--------------+------+-----+ 
| Field  | Type   | Null | Key | 
+-----------+--------------+------+-----+ 
| id  | int(6)  | NO | PRI | 
| name  | varchar(255) | NO |  | 
| age  | varchar(255) | NO |  | 
+-----------+--------------+------+-----+ 

books 
+-----------+--------------+------+-----+ 
| Field  | Type   | Null | Key | 
+-----------+--------------+------+-----+ 
| id  | int(6)  | NO | PRI | 
| name  | varchar(255) | NO |  | 
| pub_date | datetime  | NO |  | 
| author_id | int(11)  | YES | MUL | 
+-----------+--------------+------+-----+ 

我想獲得他最後寫的圖書信息作者信息。 東西會看起來像:

{ 
    name:"Tolkien", 
    age:null, 
    last_book:{ 
    name:"The Children of Hurin", 
    pub_date:"2007" 
    } 
} 

現在我正在做這樣的說法:

Select Aut.name, Aut.age, Book.name AS Book_name, Book.pub_date 
FROM authors AS Aut 
LEFT JOIN books AS Book ON (Aut.id=Book.author_id) 
WHERE Aut.name="Tolkien" 
ORDER BY Book.pub_date DESC 
LIMIT 1 

這意味着,我必須處理的結果,然後責令其擁有的JSON我先前顯示。

+1

所以...什麼這個問題? – vivoconunxino

+0

您是否在尋找一種將MySQL結果集作爲JSON字符串返回的方法?這通常在處理結果集的代碼中完成。 –

+0

有沒有辦法做到沒有後處理?如果我有更多的字段,查詢會變得更大,因爲我必須重命名所有相同的字段。 – johnmalkovitch

回答

0

唯一的辦法就是後期處理,但沒有那麼多,如果你使用json_encode序列化對象:

$res = mysqli_query("SELECT ..."); 
$obj = new stdClass(); 
if($row = mysqli_fetch_object($res)) { 
    $obj->name=$row->name; 
    $obj->age=$row->age; 
    $book = new stdClass(); 
    $book->name = $row->Book_name; 
    $book->pub_date = $row->pub_date; 
    $obj->last_book = $book; 
} 

print json_encode($obj); 
+0

好的,謝謝,我知道這並不難,我已經做到了,我只是想知道如果沒有後處理! – johnmalkovitch

相關問題