2014-02-11 96 views
2

这是我的数据库表,我如何查询,以便我可以得到如下所需的输出。我可以查询数据库使用单个查询语句来获取JSON输出?Mysql查询加入条件

Table name: rowManager 
    +-------------+-----------------+----------------+ 
    | rowid  |  rowname | showid   | 
    +-------------+-----------------+----------------+ 
    |   1 | first   |    0 | 
    |   17 | second   |    2 | 
    |   18 | third   |    0 | 
    |   20 | forth   |    0 | 
    +-------------+-----------------+----------------+ 
    Table name: row_vid 
    +-------------+----------------+-----------------+-----------------+ 
    | rowid  | name   |  description | submission_date | 
    +-------------+----------------+-----------------+-----------------+ 
    |   1 | Learn PHP  | abavavaav  | 2007-05-24  | 
    |   17 | Learn MySQL | sdasdsa   | 2007-05-24  | 
    |   20 | JAVA Script | Sanjay   | 2007-05-06  | 
    |   1 | JAVA   | Sanjay   | 2007-05-06  | 
    |   18 | Android  | Sanjay   | 2007-05-06  | 
    |   17 | ios   | Sanjay   | 2007-05-06  | 
    |   1 | python   | Sanjay   | 2007-05-06  | 
    |   18 | c++   | Sanjay   | 2007-05-06  | 
    |   18 | c#    | Sanjay   | 2007-05-06  | 
    |   17 | ruby   | Sanjay   | 2007-05-06  | 
    |   18 | JQuery   | Sanjay   | 2007-05-06  | 
    |   17 | objective c | Sanjay   | 2007-05-06  | 
    |   1 | JAVA Tutorial | Sanjay   | 2007-05-06  | 
    +-------------+----------------+-----------------+-----------------+ 



$rowQuery='SELECT * from row_vid,rowManagr where rowManagr.showid=0'; 

我试图查询这些表,使得它给了我像输出:

{ 
    "responses":{ 
     "First":[ 
     { 
      "name":"Learn PHP" 

     }, 
     { 
      "name":"JAVA" 

     }, 
     { 
      "name":"python" 

     }, 
     { 
      "name":"JAVA Tutorial" 
     } 
     ], 
     "Other Show":[ 
     { 
      "name":"Learn MySQL" 
     }, 
     { 
      "name":"ios" 
     }, 
     { 
      "name":"ruby", 

     }, 
     { 
      "name":"objective c" 
     } 
     ], 
     "Videos":[ 
     { 
      "name":"Android" 
     }, 
     { 
      "name":"c++ " 
     }, 
     { 
      "name":"c#", 

     }, 
     { 
      "name":"JQuery" 
     } 
     ] 
    } 
} 

感谢

+1

我觉得你首先需要看看连接。 – Strawberry

+0

我想但不能得到所需的输出:( – user3294288

回答

3

要开始,我相信这是你要找的查询:

SELECT rowManager.rowname as category, row_vid.name as name 
FROM  rowManager, row_vid 
WHERE rowManager.rowid=row_vid.rowid 
ORDER BY rowManager.rowid, row_vid.name 

在PHP中,你可以这样做:

$sql = "SELECT rowManager.rowname as category, row_vid.name as name FROM rowManager, row_vid WHERE rowManager.rowid=row_vid.rowid ORDER BY rowManager.rowid, row_vid.name" 

$query_result = mysqli_query($sql); 

// Piece together the $responses array, which will have [category] 
// as key, while value is an array of 'name':[name]' pairs. 
$responses = array(); 
while ($row = mysqli_fetch_assoc($query_result)) { 
    if (!array_key_exists($row['category'], $responses)) { 
    $responses[$row['category']] = array(); 
    } 
    array_push($responses[$row['category']], array('name' => $row['name'])); 
} 

// Entire $response array is the value of 'responses' key in the 
// final $results array. 
$results = array('responses' => $responses); 

// Convert $results_array to JSON and print. 
print(json_encode($results)); 
+0

谢谢............ :) – user3294288

1

你可能会想使用JOIN构建您收集的数据。但是,然后,你将不得不“手动”把我变成JSONmysql没有内置函数返回JSON数据。您可以在php的响应中执行此操作,也可以使用CONCAT或类似命令在mysql中构建您的JSON响应。

你最好的选择,以便能够调试,跟踪误差和容易地通过遍历您mysql结果,构建多维array具有相似的布局,然后在运行json_encode处理您JSON布局可能会在php做到这一点阵列。

0

如果你有rowManager与列名row_vid之间的关系ROWID,那么你不能得到输出,这些查询 -

SELECT 
    * 
FROM 
    row_vid AS rvid 
     LEFT JOIN 
    rowManagr rm ON rvid.rowid = rm.rowid 
WHERE 
    rm.showid = 0 

这个查询后,你将不得不使用PHP来遍历这个查询结果和格式化您的预期数据并使用PHP将这些数据编码为json。