1

我带着一个关于mysql查询的问题来这里。我会尽量让它简单快速(并且可以理解,因为我说法语)这是我在 StackOverFlow 上的第一篇文章,它已经帮助我解决了各种问题,所以感谢所有社区 :)

我对 php 和 mysql 很陌生,我正在编写一个使用 php 和 mysql 的 iOS 应用程序。在此示例中,我使用了 2 个不同的表:

-Utilisateurs(法语用户),其中包含:

  • 姓名
  • image_name(引用服务器上的 profileImage)
  • 以及我在此示例中未使用的其他字段

-追随者,包含:

  • 用户名(安静显式)
  • 跟随(此字段包含 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'].'$ #';
    }
 }
}

当我使用例如“benben”(我的当前用户)作为 $_GET['username'] 的用户名执行此查询时,一切正常,这是我在 Webbrowser 中得到的结果

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

在这里我可以看到:

  • 西蒙跟着塞巴
  • 西蒙已经关注了Seb
  • 西蒙关注了本本(我),其image_name为307233348488807.jpg

我将所有这些都放在我的 iOS 应用程序中的数组中,一切都显示正确并且工作正常。

但是,如果我关注了许多用户,而这些用户又关注了许多其他用户,那么这就是很多查询。更糟糕的是,如果许多用户同时这样做。

所以我想我应该执行一些 JOINS 以执行更少的查询,但由于我是 php 和 mysql 的新手,我不知道该怎么做。我已经在比这个更简单的查询中执行了一些 JOINS,但是这个让我感到困惑。

因此,如果有人对我有一些建议或可以帮助我通过 JOINS 执行此请求,将不胜感激:)

4

1 回答 1

0

我想说告诉我更多关于你想要实现的目标,因为这可能需要比简单的连接修复更底层的优化,在 2 天内回显跟踪链背后的逻辑是什么?此外,如果这将是一个重负载应用程序,最好使用 hadoop 或其他一些面向对象的数据库,而不是更容易扩展的 mysql。让我知道

于 2012-10-18T10:31:16.870 回答