1

mysqlクエリに関する質問があります。私はそれをシンプルかつ迅速にするように努めます(そして私はフランス語を話すので理解しやすいです)これはStackOverFlowへの私の最初の投稿です。

私はphpとmysqlに慣れていないので、phpとmysqlを使用するiOSアプリケーションを作成しています。ここでは、この例で2つの異なるテーブルを使用しています。

-以下を含むUtilisateurs(フランス語のユーザー):

  • 名前
  • image_name(サーバー上のprofileImageへの参照)
  • この例で使用していないその他のフィールド

-フォロワー、含む:

  • user_name(静かな明示的)
  • follow(このフィールドには、user_nameがフォローするユーザーの名前が含まれます

これが完全に機能するクエリです

    if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }

    mysql_select_db(db, $con);


    // By this request I select the users that my current user ($_GET['userName']) follows

    $result = mysql_query('SELECT user_name, follows FROM Followers WHERE user_name = "'.$_GET['userName'].'"');
    while($row = mysql_fetch_array($result)){



    //When I find a user that my current user follows, I select his name and the name of the user(s) that user has followed less than 2 days ago

     $user = $row['follows'];
     $res = mysql_query('SELECT user_name, follows, followed_on FROM Followers WHERE user_name = "'.$user.'" AND TO_DAYS(NOW()) - TO_DAYS(followed_on) <= 2');



    // Now when I find a user that is followed by the user that my current user follows, I select the profile image linked to his profile

     while($follow = mysql_fetch_array($res)){
     $img = mysql_query('SELECT image_name FROM Utilisateurs WHERE name = "'.$follow['follows'].'"');
     if(mysql_num_rows($img) != 0){



//And here I echo differents results if a profileImage has been found or not

        $imgProfile = mysql_fetch_row($img);
        echo $follow['user_name'].'$'.$follow['follows'].'$'.$imgProfile[0].'#';
    }else{
        echo $follow['user_name'].'$'.$follow['follows'].'$ #';
    }
 }
}

たとえば、$ _ GET ['username']のuserNameとして「benben」(現在のユーザー)を使用してこのクエリを実行すると、すべてが完全に機能します。これが、Webブラウザで取得した結果です。

Simon $ Seba $#Simon $ Seb $#Simon $ benben $ 307233348488807.jpg#

ここで私はそれを見ることができます:

  • サイモンはセバをフォローしています
  • サイモンはセブをフォローしています
  • Simonは、image_nameが307233348488807.jpgであるbenben(私)をフォローしています。

これらすべてをiOSアプリケーションの配列に配置すると、すべてが正しく表示され、正常に動作します。

しかし、他の多くのユーザーをフォローしている多くのユーザーをフォローしている場合、それは多くのクエリです。さらに、多くのユーザーが同時にこれを行っている場合はさらに悪化します。

したがって、実行するクエリを減らすためにいくつかのJOINSを実行する必要があると思いますが、phpとmysqlは初めてなので、その方法がわかりません。これよりも単純なクエリですでにいくつかのJOINSを実行しましたが、これは混乱を招きます。

ですから、誰かが私にアドバイスをくれたり、JOINSでこのリクエストを実行するのを手伝ってくれるなら、それは大いにありがたいです:)

4

1 に答える 1

0

これには単純な結合修正よりも低レベルの最適化が必要になる可能性があるため、達成しようとしていることについて詳しく教えてください.2日間フォローのチェーンをエコーする背後にあるロジックは何ですか? また、これが負荷の高いアプリになる場合は、スケールアップが容易な mysql ではなく、hadoop またはその他のオブジェクト指向データベースを使用することをお勧めします。お知らせ下さい

于 2012-10-18T10:31:16.870 に答える