在mysql WHERE子句中正确传递5,000到100,000个值的方法

Yog*_*til 1 php mysql symfony

我从一个查询结果中获取45000个值,并且需要使用此值进行第二次查询,但由于数组的大小,执行所需的时间超过30秒,因此获取错误:

错误:超出最大执行时间30秒

有没有其他方法可以快速执行此数据库数据计算,或者我应该计算数据并将其保存在另一个表中以便随时显示

查询:

    $query = $em->createQuery('SELECT DISTINCT(u.username) as mobile FROM sessionTable u WHERE u.accesspoint IN (?1) ');
    $query->setParameter(1, $accesspoint);
    $result = $query->getResult();
    $count = count($result);
    $i = 0;
    $numbers = array();
    foreach ($result as $value) {
        $numbers[$i] = $value['mobile'];
        $i++;
    }

    dump(count($numbers)); //---->  Output is 48567 --successful

    $Users = $this->getDoctrine()
            ->getRepository('AcmeDataBundle:User')
            ->findByNumber($numbers);

    ----Error Occurs Here------

    dump(count($Users));
    die();
Run Code Online (Sandbox Code Playgroud)

我正在使用symfony 2.0框架,doctrine 2.0

更新:考虑我在同一个数据库中有5个表,即.1-用户2- googleData 3- facebook数据4-yahooData 5-会话

当用户登录我的应用程序时,我从一个或多个社交个人资料数据中收集性别信息,并保存在该特定表格中

现在我要计算所有使用过多次会话的男性用户:女性比例,

对于这种情况,它很难计算男性:多个表的女性比例.我觉得有一个解决方案,如果我直接在会话表中添加Gender列,那么使用FK还是其他任何更好的方法?

e4c*_*4c5 7

如果您必须传递1000个值,请不要介意100,000个值,这可能意味着您在设计查询时遇到问题.数据必须来自某个地方,如果它来自数据库,使用连接或子查询将是一件简单的事情.如果它来自外部源,它可以进入临时表.

简而言之:是的,临时或永久的桌子更好

  • 我试过快速测试查询传递参数(8个字符长字符串).我可以得到pdo的最大值是2000,然后它哭了,死了. (2认同)