2018-10-11 21:35
浏览 21


I am trying to sort by publishedAt. The sql is inserting from json data and I need to get the newest, but this code getting the oldest.

What is wrong with my code?

$loop = mysqli_query($conn, "SELECT channelid, videoId FROM users ORDER BY id")
    or die (mysqli_error($conn));

    while ($row = mysqli_fetch_array($loop))
        $channelid = $row['channelid'];
        $url = ''.$channelid .'&maxResults=5&key=KEY';
        $content = file_get_contents($url); 
        $json = json_decode($content, true);    

        if(!isset($json['items'])) continue; //skip if no items

        $videos = ['videoId'=>'','videoId1'=>'','videoId2'=>'','videoId3'=>'','videoId4'=>''];
        $i = 0;

        foreach($json['items'] as $items)
            $publishedAt = $items['snippet']['publishedAt'];
            $key  = 0==$i ? 'videoId' : 'videoId'.$i;
            $videos[$key] = $items['id']['videoId']; 
        $ii = 0;

        $sql = "INSERT INTO users(channelid, publishedAt, videoId, videoId1, videoId2, videoId3, videoId4) VALUES('$channelid', '$publishedAt', '{$videos['videoId']}', '{$videos['videoId1']}', '{$videos['videoId2']}', '{$videos['videoId3']}', '{$videos['videoId4']}')    
            ON DUPLICATE KEY UPDATE channelid=VALUES(channelid), publishedAt=VALUES(publishedAt), videoId=VALUES(videoId), videoId1=VALUES(videoId1), videoId2=VALUES(videoId2), videoId3=VALUES(videoId3), videoId4=VALUES(videoId4);
        mysqli_query($conn, "SET NAMES utf8");
            die('Error : ' . mysqli_error($conn));
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongsuiying7773 2018-10-11 21:46

    When you're looping through $json['items'] you're overwriting $publishedAt with the last item for each loop.

    If you only want the publishedAt of your first item you should get the first item directly (no loop necessary). But if you want to insert every items you should put your query inside the foreach.

    解决 无用
    打赏 举报

相关推荐 更多相似问题