我想根据另一个表中是否存在行,为从查询中获得的每一行添加一个值。有没有一种聪明的方法来实现这一点?
这是我的代码:
$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
是错误的,但很难说,因为你对最终目标含糊其辞。例如,如果我假设以下
- 标签将始终存在
- subApp2Tag将始终存在
- 您想知道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
");
- 您必须在一个查询中完成所有工作
- 为什么在向数组中添加$r之前不能只使用
$r['append'] = "value";