从将在PHP中进行JSON编码的mysql查询中添加值?

时间:2012-02-24 11:15:37

标签: php mysql json

我想为从查询中获取的每一行添加一个值,具体取决于另一个表中是否存在一行。有没有明智的方法来实现这一目标?

这是我的代码:

$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 个答案:

答案 0 :(得分: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 JOIN tbl_tag上的tbl_tag是错误的方法,但很难说你最终的目标是模糊的。例如,如果我假设以下

  1. 标签将始终存在
  2. subApp2Tag将始终存在
  3. 您想知道tbl_userDevice2Tag中的记录是否与上述
  4. 匹配

    然后我会做以下事情。 INNER JOIN意味着它不会担心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 :(得分:1)

  1. 你必须在一个查询中完成所有工作。
  2. 在将$ r添加到数组之前,为什么不能只$r['append'] = "value";