2015-04-23 62 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

相关问题