【问题标题】:how to combine two different tables data into a single json object如何将两个不同的表数据组合成一个 json 对象
【发布时间】:2009-12-04 07:13:27
【问题描述】:

我正在通过以下查询创建一个 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 对象中。请指导!!

【问题讨论】:

  • 这可以通过进行 JOIN'ed SQL 查询轻松解决 - 您能给我们三个表的架构吗?
  • “查询 3 结果[1]”是什么?您在第三个查询中只选择一个字段 cat_name。

标签: php json object


【解决方案1】:

您的表类别中以及 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, ...)看起来这种能力可能会简化您的架构(或至少是列名)并使它们更容易理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 2016-11-12
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2016-07-20
    • 1970-01-01
    相关资源
    最近更新 更多