2011-09-14 15 views
4

私は結果を得ているのは、MySqlYogを言わせて使用​​して、このクエリを実行していたとき、私は、問題(GROUP BYではありません)

をPHPを使用してMySQLの上でクエリを実行しようとしているとすべてが大丈夫と思われる。

問合せ:

SELECT 
    start_time AS `Date`, 
    COUNT(1) AS `Count` 
FROM 
    offline_execution_jobs 
WHERE start_time >= NOW() - INTERVAL 365 DAY 
AND application_name LIKE 'SPLAT-ROLLING' OR application_name LIKE 'SPLAT' 
GROUP BY (WEEK(start_time)) 
ORDER BY `Date` ASC ; 

しかし、私はPHPからクエリを実行しようとしているときに問題がある:

私はこのエラーを取得しています:誰場合

Invalid query: 'nolio_db.offline_execution_jobs.start_time' isn't in GROUP BY 

をこの問題を経験した私はそれを克服することが可能であることを聞いてうれしいですか?最初の列の日付形式の週の

初日、2番目の列などのイベントの数:

は、私は次の形式でGROUP BYの出力を必要とします。

2011-01-09 03:28:54 | 38

+0

なぜ時間部分が含まはありますか?あなたが週の最初の曜日の日付を表示したい場合は、単に日付ではないでしょうか? –

答えて

1

Dateは、暦に従って番目のテーブルで検出された週の最初のstart_time値ではなく、週の最初の日であるべき場合あなたはこのような単純集計start_timeできエン:、おそらくのみWEEK(start_time)によってところで

SELECT 
    MIN(start_time) AS `Date`, 
    COUNT(1) AS `Count` 
FROM 
    offline_execution_jobs 
WHERE start_time >= NOW() - INTERVAL 365 DAY 
AND application_name LIKE 'SPLAT-ROLLING' OR application_name LIKE 'SPLAT' 
GROUP BY (WEEK(start_time)) 
ORDER BY `Date` ASC ; 

グループ分けではない必要があります。昨年の日付は同じ週番号を持つ可能性があります。したがって、あなたのクエリは異なる週をまとめてグループ化します。それを修正するには、あなただけのGROUP BYリストにYEAR(start_time)を追加することができます。

SELECT 
    MIN(start_time) AS `Date`, 
    COUNT(1) AS `Count` 
FROM 
    offline_execution_jobs 
WHERE start_time >= NOW() - INTERVAL 365 DAY 
AND application_name LIKE 'SPLAT-ROLLING' OR application_name LIKE 'SPLAT' 
GROUP BY YEAR(start_time), WEEK(start_time) 
ORDER BY `Date` ASC ; 
3

あなたがWEEKのstart_timeでグループ化している場合は、(日付そのものではなく)選択する必要があるものがそれです。それ以外の場合は、どのようにカウントを報告しますか?各日付ではなく、毎週のカウントを表示するとします。

また、where句にセマンティックエラーがあります。括弧を使用して、ANDおよびORの優先順位を明示的に設定する必要があります。

SELECT WEEK(start_time) AS Week, COUNT(1) AS Count 
FROM offline_execution_jobs 
WHERE start_time >= NOW() - INTERVAL 365 DAY 
AND (application_name LIKE 'SPLAT-ROLLING' 
OR application_name LIKE 'SPLAT') 
GROUP BY WEEK(start_time) 
ORDER BY WEEK(start_time) ASC ; 

このクエリ:

1 21 
2 50 
3 15 

しかし、私はこのようなものが必要です:

2011-01-04 08:05:24 21 
2011-01-09 03:28:54 8 
2011-01-16 06:08:18 11 
2011-01-23 06:06:50 32 

そしてMySqlYogからこのクエリを実行する

SELECT WEEK(start_time) AS Week, COUNT(1) AS Count 
FROM offline_execution_jobs 
WHERE start_time >= NOW() - INTERVAL 365 DAY 
AND (application_name LIKE 'SPLAT-ROLLING' 
OR application_name LIKE 'SPLAT') 
GROUP BY WEEK(start_time) 
ORDER BY WEEK(start_time) ASC ; 

は、次の結果を返します。 (MySQLのWindowsクライアント)、私は私はPHPコードからこのクエリを実行していたときに望ましい結果を得て、問題が発生します。

SELECT start_time AS WEEK, COUNT(1) AS COUNT 
FROM offline_execution_jobs 
WHERE start_time >= NOW() - INTERVAL 365 DAY 
AND (application_name LIKE 'SPLAT-ROLLING' 
OR application_name LIKE 'SPLAT') 
GROUP BY WEEK(start_time) 
ORDER BY WEEK(start_time) ASC ; 

は、ここで私はPHPから取得していますエラーです:

Invalid query: 'nolio_db.offline_execution_jobs.start_time' isn't in GROUP BY 

Whole query: SELECT start_time AS Date, COUNT(1) AS Count FROM offline_execution_jobs WHERE start_time >= NOW() - INTERVAL 250 DAY AND (application_name LIKE 'SPLAT-ROLLING' OR application_name LIKE 'SPLAT') GROUP BY WEEK(start_time) ORDER BY WEEK(start_time) ASC ; 

そしてこれは、それはint型をどのように見えるかであります彼はコード:

$query = "SELECT start_time AS Date, COUNT(1) AS Count 
        FROM offline_execution_jobs 
        WHERE start_time >= NOW() - INTERVAL 250 DAY 
        AND (application_name LIKE 'SPLAT-ROLLING' OR application_name LIKE 'SPLAT') 
        GROUP BY WEEK(start_time) 
        ORDER BY WEEK(start_time) ASC ;"; 

    //echo "<br><br>$query<br><br>"; 

    // Create connection to DB        
    $conn = mysql_connect($db_host, $db_user, $dp_pass); 

    if (!$conn) 
    { 
     echo "<br/>Can't connect: $db_host"; 
     die('Could not connect: ' . mysql_error()); 
    } 
+0

これは週単位でグループ化したくないので、start_timeでグループ化するだけです。その場合は、week(start_time)ではなくstart_timeで/ orderでグループを作成します。 –

関連する問題