将值添加到mysql查询的结果中,该结果将用PHP进行JSON编码


add value to result from mysql query that will be JSON encoded in PHP?

我想根据另一个表中是否存在行,为从查询中获得的每一行添加一个值。有没有一种聪明的方法来实现这一点?

这是我的代码:

$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的初学者,所以如果我还错过了什么,请告诉我。

EDIT:第二个查询来自错误的表。这是正确的。

编辑在下面的查询中编辑以反映新信息,因为我不喜欢半途而废。

$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
");

尽管以上感觉tbl_tag上的LEFT JOIN是错误的,但很难说,因为你对最终目标含糊其辞。例如,如果我假设以下

  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. 您必须在一个查询中完成所有工作
  2. 为什么在向数组中添加$r之前不能只使用$r['append'] = "value";