Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 内部连接3个查询_Php_Sql - Fatal编程技术网

Php 内部连接3个查询

Php 内部连接3个查询,php,sql,Php,Sql,我想知道如何将这3个查询连接在一起,因为我只需要一个JSON输出,我认为内部连接可以做到这一点。但我不知道怎么用这个。有人能指引我走正确的路吗 $json = array(); $following_string = mysqli_real_escape_string($mysqli,$_SESSION['id']); $call="SELECT * FROM streamdata WHERE streamitem_id < '$lastID' AND streamitem_targe

我想知道如何将这3个查询连接在一起,因为我只需要一个JSON输出,我认为内部连接可以做到这一点。但我不知道怎么用这个。有人能指引我走正确的路吗

  $json = array();
$following_string = mysqli_real_escape_string($mysqli,$_SESSION['id']);
$call="SELECT * FROM streamdata WHERE streamitem_id < '$lastID' AND streamitem_target=".$following_string." OR streamitem_creator=".$following_string." ORDER BY streamitem_id DESC LIMIT 10";
$chant = mysqli_query($mysqli, $call) or die(mysqli_error($mysqli));

$json['streamdata'] = array();

while ($resultArr = mysqli_fetch_assoc($chant)) {

    $json['streamitem_id'] = $resultArr['streamitem_id'];
    $json['streamitem_content'] = $resultArr['streamitem_content'];
    $json['streamitem_timestamp'] = Agotime($resultArr['streamitem_timestamp']);

 $json['streamdata'] = $json;
}

/***** COMMENTS *****/
$check = "SELECT comment_id, comment_datetime, comment_streamitem, comment_poster, comment_content FROM streamdata_comments WHERE comment_poster=".$following_string." ";
$check1 = mysqli_query($mysqli,$check);
$json['streamdata_comments'] = array();

while ($resultArr = mysqli_fetch_assoc($check1)) {

    $json['comment_id'] = $resultArr['comment_id'];
    $json['comment_content'] = $resultArr['comment_content'];
    $json['comment_poster'] = $resultArr['comment_poster'];
    $json['comment_datetime'] = Agotime($resultArr['comment_datetime']);
    $json['comment_streamitem'] = $resultArr['comment_streamitem'];

$json['streamdata_comments'] = $json;
}

/***** USERS *****/

$check = "SELECT * FROM users WHERE id=".$following_string."";
$check1 = mysqli_query($mysqli,$check);
$json['users'] = array();

while ($resultArr = mysqli_fetch_assoc($check1)) {

    $json['username'] = $resultArr['username'];
    $json['id'] = $resultArr['id'];
    $json['first'] = $resultArr['first'];
    $json['middle'] = $resultArr['middle'];
    $json['last'] = $resultArr['last'];

$json['users'] = $json;
}


echo json_encode($json);
}
?>

您正在获取不相关的数据。只有当要联接的数据具有关系时,联接数据才有用


您不能连接苹果、奶牛和猴子。

您正在获取不相关的数据,因此不能在SQL级别使用连接

但是JSON不在乎你给它喂什么,或者怎么喂。只需构建适当的PHP级数据结构,例如

$data = array();
$data['streamdata'] = array();
... insert data from 'streamdata' query...
$data['streamdata_comments'] = array();
... insert comment data ...
$data['users'] = array();
... insert user data ...

这将为您提供一个3向数组,其中包含来自每个查询的数据。然后将整个$data结构传递给json_encode,然后boom-在一个数据结构中有3个未分级的查询,每个查询都不涉及SQL联接。

以前的一些答案表明,不能联接不相关的表,但这些表显然不是不相关的表。streamdata和streamdata_comments表密切相关,users表将其他表中的用户ID值映射到名称

在SQL级别,可以很容易地将这些功能组合在一起:

SELECT d.*, c.*, u.*
  FROM streamdata          AS d
  JOIN streamdata_comments AS c ON d.streamitem_ID = c.comment_streamitem
  JOIN users               AS u ON u.user_id = c.comment_poster
 WHERE c.comment_poster = '$following_string'
   AND d.streamitem_id < '$lastID'
   AND (d.streamitem_target  = '$following_string' OR
        d.streamitem_creator = '$following_string');

将结果包装成JSON字符串是否有意义是另一回事,对此我不能吹毛求疵。这将为您提供与每个流项目相关联的每个注释的注释信息中的一条记录。

但您不知道如何使用此记录。您是否尝试过阅读文档?它应该是“执行此操作”。但是,是的,我有,也没有线索。你具体读了什么?虽然不是MYSQLI,但几乎是一样的。我试图以此为例。如果你不知道该读什么-维基百科并不是所有东西的坏选择-PS:盲目重复示例而不阅读一些文本的学习通常是没有意义的。。。如果life_type='carbon_-based'?那么我如何才能将数组连接在一起,以json_encode$json作为一个数组输出;这很好用。现在它只返回1个结果。我需要它再发送9个。我该怎么做?我有一部分。在firebug中,通过使用$json['streamdata']=$json,我在响应中得到了10个结果;在循环中/。但在我的网站上只打印出一个结果。就快到了。你需要构建一个数组,你只需要一遍又一遍地分配一个字符串。将其设置为$json['streamdata'][]=$json。注意额外的[]。也许你可以帮我做点什么@Jonathan,我已经用我目前掌握的更新了我的问题代码。我需要打印10个结果。虽然我的代码现在几乎可以工作了,我在firebug中的响应有这10个结果,但当我单击“加载更多结果”时,它只显示1。我需要做些什么来纠正这一点。@dave:简单地说,我不知道。可能问题在于您正在为$json赋值,而不是添加到它。您应该查看正在生成的SQL,以及返回的结果。这将告诉您DBMS给了您什么。然后,您必须解决如何在JSON中正确地打包它。如果显示的行是您期望的集合的最后一行,那么我假设我的“覆盖而不是追加”诊断可能是正确的。但我不知道该怎么纠正。