0

私は自分のサイトにユーザーの投稿を取得するためのポーリング機能を構築してきました。そして、その動作中に、私はいくつかのことをする必要があります。友達の投稿のみを取得し、最後に挿入されたID以降の友達によるすべてのメッセージを挿入します。

データベースに最後に挿入されたエントリよりも多くを選択するためのコードが必要です。最後に挿入されたIDから挿入されたすべてのIDを選択するようにデータベースに要求する必要があります。フィードATMに表示されるのは1つだけです。別のアカウントから2つの投稿を投稿し、最後の結果のみを表示したので、これを知っています。

この問題を修正するにはどうすればよいですか?いいえ。私のサイトはまだ公開されておらず、生データを保護していません。:)私のサイト全体ですぐにやろうとしていること。

    <?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()

4

1 に答える 1

0

私が言いたいのはこのようなものです。

最初のSQLステートメントは、必要なすべてのレコードを検索します。そして、それらをjson配列に処理し、完了したらそれを返す必要があります。

(私はこのコードをテストしていません、そして私のmysqliは最高ではありませんが、少なくとも私がやろうとしていることをあなたが見ることができることを願っています)

また、すべてのSQL呼び出しを1つにマージしました。

$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);
于 2012-08-30T20:00:10.870 に答える