2016-09-23 17 views
1

我從一個查詢結果中獲得45000個值,並且需要使用此值進行第二次查詢,但由於數組的大小較大,所以其花費的時間長於30秒執行因此讓錯誤:在MySQL中傳遞5,000到100,000個值的正確方法WHERE子句

Error: Maximum execution time of 30 seconds exceeded

是否有任何其他的方式來快速做這個數據庫中的數據計算,或者我應該計算數據並將其保存在另一個表隨時

查詢顯示:

$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(); 

我使用symfony的2.0框架,原則2.0

UPDATE: 考慮我在同一個數據庫5桌, 即。 1-用戶2- Google資料3- Facebook的數據4- yahooData -5-會話

當用戶登錄到我的申請中,我收集來自一個或多個社交簡檔數據有性別的信息,並保存在那個特定的表

現在我想計算所有用戶使用多個會話的男性:女性比例,

對於這種情況,從多個表格計算男性:女性比例太困難。 我覺得有一個解決方案,如果我直接在會話表中添加性別列,但使用FK或其他任何方式還有其他更好的方法嗎?

+0

將數組拆分成塊並執行多個查詢。 – user4035

+1

或嘗試'ini_set('max_execution_time',300); // 300秒= 5分鐘' – devpro

+0

注意到您的更新,但很遺憾地說,這使得問題不清楚,而不是更清楚。如果您不介意,請添加show create table output和幾行示例數據 – e4c5

回答

7

如果您不得不通過1000個值,請不要介意100,000個值,這可能意味着您在設計查詢時遇到問題。數據必須來自某個地方,如果它來自數據庫,使用連接或子查詢將是一件簡單的事情。如果它來自外部來源,則可以進入臨時表格。

簡而言之:是的,臨時或永久表格更好

+0

考慮我在同一數據庫中有4個表, –

+1

如果您對此不滿意,您應該做的是更新您的問題以發佈你的表格也解釋你的100,000個物品來自哪裏 – e4c5

+0

是的,我已經更新了我的問題,並且感謝所有的建議 –