douxu0550
2018-10-11 21:35
浏览 21
已采纳

Php数组插入不是最后一个,而是先

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 = 'https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId='.$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']; 
            ++$i;
        }
        $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");
        if(!mysqli_query($conn,$sql))
        {
            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.

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题