我有两个表,在yearselection
中有两列,在testtable2
中有三列,基于第一个表ID在第二个表中使用。我想显示json使用php,这两个表响应如下。
yearselection:
id year
6 2014-2015
2 2010-2011
3 2011-2012
4 2012-2013
5 2013-2014
1 2009-2010
7 2015-2016
testtable2:
id name yearselection
1 test1 2
2 test2 1
3 test3 1
4 test4 1
5 test5 2
6 test6 3
我希望以json格式显示:
{
"2009-2010": [
{
"id": "2",
"name": "test2"
},
{
"id": "3",
"name": "test3"
},
{
"id": "4",
"name": "test4"
}
],
"2010-2011": [
{
"id": "1",
"name": "test1"
},
{
"id": "5",
"name": "test5"
}
],
"2011-2012": [
{
"id": "6",
"name": "test6"
}
]
}
mycode的
public function actionArchives()
{
//echo $keyword=$_POST['keyword'];
$query= Yii::app()->db->createCommand("select * from yearselection ORDER BY id ASC")->queryAll();
$arr = array();
if(count($query) > 0) {
foreach ($query as $queryElement) {
$query2= Yii::app()->db->createCommand("select * from testtable2 where yearselection='".$queryElement['id']."' ORDER BY id ASC")->queryAll();
$arr[] = $queryElement;
}
}
# JSON-encode the response
$json_response = json_encode($arr);
// # Return the response
echo $json_response;
//exit;
}
答案 0 :(得分:3)
你已经像这样编写了你的查询
public function actionArchives()
{
//echo $keyword=$_POST['keyword'];
$query= Yii::app()->db->createCommand("SELECT y.year,y.id as year_id,t.id as test_id,t.name
FROM yearselection as y JOIN testtable2 as t
ON y.id=t.yearselection")->queryAll();
$arr=array();
if(count($query) > 0)
{
$arr = $query;
// Now you run loop to change indexes of array,i.e.
$count=count($arr);
for($i=0;$i<$count;$i++)
{
$year=$arr[$i]['year'];
$arr[$year]=$arr[$i];
unset($arr[$i]);
}
// Now your array has index as your year column,
}
# JSON-encode the response
$json_response = json_encode($arr);
// # Return the response
echo $json_response;
//exit;
}
现在,一旦您编写了上述查询,您将获得包含年,年_id,test_id,名称
列的数据现在您已经在变量$arr[]
中完成了数组中的整个数据(不接触$query
变量以保留查询数据)。
现在你可以做json_encode($arr);
注意: -
请不要在循环中按下DB,就好像你的循环长度是100那样 将命中DB 100次。因此,您可以在这些情况下应用JOINS 它将根据单个参数从2个表中获取数据。
希望这能解决您的问题。