2017-02-02 25 views
0

PHP我怎麼可以運行查詢,而無需環路的foreach

我有一個問題在這裏。我正在使用下面的查詢。我正在使用循環來運行此查詢?

我該如何運行這個查詢沒有循環?

我不想在foreach中運行查詢嗎?我怎樣才能做到這一點 ?

我使用正確的方法來運行此查詢?

加載需要時間。有沒有優化來實現這一目標?

我需要執行一個多重查詢來一次運行它們嗎?

<?php 
    $year = "2016"; 
    $start = new DateTime($year.'-01-01'); 
    $start->modify('first day of this month'); 
    $end  = new DateTime($year.'-12-31'); 
    $end->modify('first day of next month'); 
    $interval = DateInterval::createFromDateString('1 month'); 
    $period = new DatePeriod($start, $interval, $end); 

    foreach ($period as $dt) { 

     $calcstart_date = $dt->format("Y-m-d").' 00:00:00'; 
     $calcend_date = $dt->format("Y-m-t").' 11:59:00'; 
     $month_name = $dt->format('M'); 

     $test_submitted_query = db_query(" 
      SELECT requester_id, email, username, is_dashboard_user, SUBMITTED_ON 
      FROM testing_a, aspusers a 
      WHERE requester_id=a.user_id 
      AND AD_MAIL_ATTRIBUTE IS NOT NULL 
      AND IS_DASHBOARD_USER = 'y' 
      AND SUBMITTED_ON >= timestamp '$calcstart_date' 
      AND SUBMITTED_ON <= timestamp '$calcend_date' 
     "); 

    } 
?> 
+0

你在與查詢結果做什麼? 您可以始終堆疊SQL查詢並執行多重查詢以一次全部運行它們? –

+0

yes your'e right @PhilipThomson –

+1

我假設加載時間是因爲SQL查詢運行效率低下。放入一些執行時間檢查以查看哪些部件運行緩慢: '$ time_start = microtime(true); //腳本中的任何地方 echo'以秒爲單位的總執行時間:'。 (microtime(true) - $ time_start);' –

回答

2

PHP的一部分是不是所必要的,你可以從MySQL使用date and time functions

SELECT requester_id, email, username, is_dashboard_user, SUBMITTED_ON 
FROM testing_a, aspusers a 
WHERE requester_id=a.user_id 
AND AD_MAIL_ATTRIBUTE IS NOT NULL 
AND IS_DASHBOARD_USER = 'y' 
AND YEAR(SUBMITTED_ON) = $year 
GROUP BY MONTH(SUBMITTED_ON) 

你應該得到的結果回來了12行

+0

這*應該*工作,但如果數據庫本身的優化程度很差,它可能無法解決潛在的效率問題。 – CD001

相關問題