轮询只插入最后插入的1条记录


Polling only inserting 1 last inserted record

我一直在我的网站上建立一个轮询功能来获取用户帖子。在工作的同时,我还有一些事情要做。只抓取朋友的帖子,并插入自上次插入id以来朋友的所有消息。

我需要我的代码来选择数据库中上次插入的条目以外的条目。我需要它让数据库从上次插入的id中选择每个插入的id,我在提要atm中只显示了1,我知道这一点,因为我从另一个帐户发布了两篇帖子,它只显示了最后的结果。

如何更正此问题?没有。我的网站还没有上线,我也没有保护我的原始数据。:)我很快就会在整个网站上做一些事情。

    <?php 
    $last = isset($_GET['old_msg_id']) ? $_GET['old_msg_id'] : 0;
   $result = mysqli_query($mysqli,"SELECT streamitem_id FROM streamdata");
while($row = mysqli_fetch_array($result))
    {
    $current = $row['streamitem_id']; 
    }
    while( $current <= $last) {
    usleep(1000);
    clearstatcache();
    $current = $row['streamitem_id'];
    }
    $json = array();
    $check = "SELECT streamitem_id, streamitem_timestamp, streamitem_content, streamitem_creator FROM streamdata WHERE streamitem_id=".$current." AND streamitem_type_id=1 ORDER BY streamitem_id DESC LIMIT 5";
    $check1 = mysqli_query($mysqli,$check);
    $resultArr = mysqli_fetch_array($check1);
    $json['streamitem_id'] = $resultArr['streamitem_id'];
    $json['streamitem_timestamp'] = Agotime($resultArr['streamitem_timestamp']);
    $json['streamitem_content'] = $resultArr['streamitem_content'];
    $json['streamitem_creator'] = $resultArr['streamitem_creator'];
    mysqli_free_result($check1);

    $check = "
    SELECT * FROM users u 
    INNER JOIN streamdata s ON
    (s.streamitem_creator = u.id AND s.streamitem_id = {$current})";
    $check1 = mysqli_query($mysqli,$check);
    $resultArr = mysqli_fetch_array($check1);
    $json['username'] = $resultArr['username'];
    $json['id'] = $resultArr['id'];
    $json['first'] = $resultArr['first'];
    $json['middle'] = $resultArr['middle'];
    $json['last'] = $resultArr['last'];
    mysqli_free_result($check1);
    echo json_encode($json);
    ?>

我必须使用mysqli_affected_rows()

我的意思是这样的。

初始SQL语句将查找您需要的所有记录;然后您只需要将它们处理到json数组中,并在完成后返回。

(我还没有测试过这个代码,我的mysqli也不是最好的,但我希望你至少能看到我在做什么)

我还将所有SQL调用合并为一个调用。

$last = isset($_GET['old_msg_id']) ? $_GET['old_msg_id'] : 0;
$stmt = mysqli_prepare($mysqli,"SELECT * FROM streamdata s INNER JOIN users u ON s.streamitem_creator = u.id WHERE streamitem_id >= ? "); 
$stmt->bind_param("s", $last);
$stmt->execute();
$json = array();
$count = 0;
while ($row = $stmt->fetch_array()) {
    $json[$count]['streamitem_id'] = $row['streamitem_id'];
    $json[$count]['streamitem_timestamp'] = Agotime($row['streamitem_timestamp']);
    $json[$count]['streamitem_content'] = $row['streamitem_content'];
    $json[$count]['streamitem_creator'] = $row['streamitem_creator'];
    $json[$count]['username'] = $row['username'];
    $json[$count]['id'] = $row['id'];
    $json[$count]['first'] = $row['first'];
    $json[$count]['middle'] = $row['middle'];
    $json[$count]['last'] = $row['last'];
}
echo json_encode($json);