如何将两个不同的表数据组合成一个json对象

时间:2009-12-04 07:13:27

标签: php json object

我通过以下查询制作一个json对象

    $arr = array();
        $qs=qq("select main_cat_id,main_cat_name,id,name,cat_id,cat_id_main from main,scheme where main_cat_name='xyz' and cat_id_main=main_cat_id");
        while($obj = mysql_fetch_object($qs))
        {
            $arr[] = $obj;
        }
        $total=sizeof($arr);
        $jsn_obj='{"scheme":'.json_encode($arr).',"totalrow":"'.$total.'"}';

 // this is a mock example

现在我有另一个查询

查询2:

    $q=qq("select main_cat_id,main_cat_name,id,name,cat_id,cat_id_main from main,scheme where main_cat_name='xyz' and cat_id_main=main_cat_id order by scheme_1_year DESC");
    while($r=mysql_fetch_array($q))
    {
        $cats_id=$r['cat_id'];
        if($cats_id!=0)
        {
            $qw=qq("select cat_name from category where cat_id='$cats_id'");  // Query 3
            $rw=mysql_fetch_array($qw);
            $catm_name=$rw['cat_name'];
        }
    }
// this is a mock example

两者都在做同样的事情,但后者正在计算一些猫的名字。这个类别的表不能与之前的两个表合并,所以我必须用另一个查询来计算这个cat_name。

现在我想要一个json对象,该对象应该具有查询2的所有条目和相应的查询3结果。 像这样的东西(如果用简单的话来解释): 查询2结果[0]加查询3结果[0],查询2结果[1]加查询3结果[1]

如何在json对象中将这两个结果组合在一起。 Plz指南!!

1 个答案:

答案 0 :(得分:0)

看起来你在表类别中以及main或scheme中都有cat_id。使用在查询的两个不同表中出现的列名时,您必须确定在使用列名时您正在讨论的表。

我没有架构知道哪个列来自哪个表,但是这里猜测如何连接它们。 (注意:我在逗号后面添加了空格以便于阅读)

$q=qq("select main_cat_id, main_cat_name, id, name, scheme.cat_id, cat_id_main, category.cat_name from main, scheme, category where main_cat_name='xyz' and cat_id_main=main_cat_id and scheme.cat_id=category.cat_id order by scheme_1_year DESC");

或者,您可以使用表别名。

$q=qq("select main_cat_id, main_cat_name, id, name, s.cat_id, cat_id_main, c.cat_name from main m, scheme s, category c where main_cat_name='xyz' and cat_id_main=main_cat_id and s.cat_id=c.cat_id order by scheme_1_year DESC");

如果原始qq中的cat_id位于main而非scheme,则您必须相应地调整查询。这仍然可以使用或不使用表别名。

$q=qq("select main_cat_id, main_cat_name, id, name, main.cat_id, cat_id_main, category.cat_name from main, scheme, category where main_cat_name='xyz' and cat_id_main=main_cat_id and main.cat_id=category.cat_id order by scheme_1_year DESC");
$q=qq("select main_cat_id, main_cat_name, id, name, m.cat_id, cat_id_main, c.cat_name from main m, scheme s, category c where main_cat_name='xyz' and cat_id_main=main_cat_id and .cat_id=c.cat_id order by scheme_1_year DESC");

另外需要注意的是,如果您希望单个查询从两个不同的表中选择两列并且列具有相同的名称,则应使用列别名。 (例如select ... category.cat_name as category_cat_name from main, ...)看起来这种能力可能会简化你的模式(或至少是列名)并使它们更容易理解。