2012-02-24 56 views
0

我想爲從查詢中獲得的每一行添加一個值,具體取決於另一個表中是否存在一行。有沒有一個聰明的方法來實現這一目標?增加值的結果從PHP將JSON編碼的MySQL查詢?

這是我的代碼:

$sth = mysql_query("SELECT tbl_subApp2Tag.*, tbl_tag.* FROM tbl_subApp2Tag LEFT JOIN tbl_tag ON tbl_subApp2Tag.tag_id = tbl_tag.id WHERE tbl_subApp2Tag.subApp_id = '".$sub."' ORDER BY tbl_tag.name ASC"); 
if(!$sth) echo "Error in query: ".mysql_error(); 
while($r = mysql_fetch_assoc($sth)) { 
    $query = "SELECT * FROM tbl_userDevice2Tag WHERE tag_id='".$r['id']."' AND userDevice_id='".$user."'"; 
    $result = mysql_query($query) or die(mysql_error()); 
    if (mysql_num_rows($result)) { 
     $r['relation'] = true; 
     $rows[] = $r; //Add 'relation' => true to this row 
    } else { 
     $r['relation'] = false; 
     $rows[] = $r; //Add 'relation' => false to this row 
    } 
} 
print json_encode($rows); 

凡//添加......是,是我想插入額外的價值。有關我如何做到這一點的任何建議? 我仍然是PHP的初學者,所以如果還有其他東西我錯過了,請告訴我。

編輯:第二個查詢來自錯誤的表。這是正確的。

+2

這可以通過sql更好地完成 – k102 2012-02-24 11:18:32

回答

2

編輯編輯下面的查詢,以反映新的信息,因爲我不喜歡把事情做一半。

$sth = mysql_query(" 
    SELECT 
     tbl_subApp2Tag.*, 
     tbl_tag.*, 
     ISNULL(tbl_userDevice2Tag.userDevice_id) AS relation 

    FROM tbl_subApp2Tag 
    LEFT JOIN tbl_tag 
     ON tbl_tag.id = tbl_subApp2Tag.tag_id 

    LEFT JOIN tbl_userDevice2Tag 
     ON tbl_userDevice2Tag.tag_id = tbl_tag.id 
     AND tbl_userDevice2Tag.userDevice_id = '".$user."' 

    WHERE tbl_subApp2Tag.subApp_id = '".$sub."' 
    ORDER BY tbl_tag.name ASC 
"); 

雖然上面感覺就像LEFT JOINtbl_tag是圍繞着錯誤的方式,但它很難說,你對你的最終目標模糊。例如,如果我是假設以下

  1. 標籤會一直存在
  2. subApp2Tag會一直存在
  3. 你想知道的話,tbl_userDevice2Tag中的記錄匹配上述

然後我反而會做以下事情。 INNER JOIN意味着它不會擔心tbl_tag中不在請求的subApp_id上的記錄,這反過來會限制其他聯接。

$sth = mysql_query(" 
    SELECT 
     tbl_subApp2Tag.*, 
     tbl_tag.*, 
     ISNULL(tbl_userDevice2Tag.userDevice_id) AS relation 

    FROM tbl_tag 

    INNER JOIN tbl_subApp2Tag 
     ON tbl_subApp2Tag.tag_id = tbl_tag.id 
     AND tbl_subApp2Tag.subApp_id = '".$sub."' 

    LEFT JOIN tbl_userDevice2Tag 
     ON tbl_userDevice2Tag.tag_id = tbl_tag.id 
     AND tbl_userDevice2Tag.userDevice_id = '".$user."' 

    ORDER BY tbl_tag.name ASC 
"); 
1
  1. 您必須在單個查詢中完成所有工作。
  2. 爲什麼在將$ r添加到數組之前,您只需要$r['append'] = "value";