2012-02-24 115 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";