2009-12-04 23 views
0

IAM使JSON對象如何通過以下查詢兩個不同的表的數據組合成一個單一的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現在IAM:

$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結果的所有條目。 sumthing像這樣(如果在簡單的話解釋): 查詢2結果[0]加查詢3結果[0],查詢2結果[1]加查詢3結果[1]

如何能我俱樂部這兩個結果在一個JSON對象中。 Plz指南!

+1

這可以很容易地通過JOIN'ed SQL查詢解決 - 你可以給我們三個表的模式嗎? – gnarf 2009-12-04 07:19:29

+0

「查詢3結果[1]」是什麼?您只能在第三個查詢中選擇一個字段cat_name。 – VolkerK 2009-12-04 11:25:51

回答

0

它看起來像你在表類別和主要或方案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, ...)它看起來像這個能力可能會簡化您的模式(或至少是列名),並使它們更容易遵循。

相關問題