2011-12-15 16 views
2

ここの初心者です。以下のコードは、私が望む結果を返す素晴らしい仕事をしています。唯一の問題は、特定の日付範囲(チェックデート列にある)だけを返す方法を見つけることができないことです。私がcheckdateの日付でフィルターに掛けることができる唯一の方法は、empchecks.checkdateによってグループ化し、HAVING checkdate> =何でも使用することです。しかし、私はemployees.enumでGROUP BYする必要があります。私は何かシンプルなものが欠けていると確信しているgroup_concatの結果のフィルタリング、内部結合クエリ

SELECT employee_data.a, 
      employees_data.b, employee_data.c, 
      GROUP_CONCAT(empchecks.d 
       ORDER BY empchecks.checkdate 
       SEPARATOR '<br /> ') 
      AS checknum, 
      GROUP_CONCAT(empchecks.checkdate 
       ORDER BY empchecks.checkdate  
       SEPARATOR '<br /> ') 
      AS checkdate, 
     FROM employees 
INNER JOIN empchecks ON employees.enum = empchecks.enum 
    GROUP BY empchecks.enum 
+0

チェックデート列を作成するブロックをWHERE句に移動する必要があります。次に、特定の値と比較することができます。 – Julien

答えて

0

WHERE句を追加する必要があります。また、小さな修正 - 最後のカンマはAS checkdateの後にはありません。

SELECT employee_data.a, employees_data.b, employee_data.c, 
     GROUP_CONCAT(empchecks.d ORDER BY empchecks.checkdate SEPARATOR '<br /> ') as checknum, 
     GROUP_CONCAT(empchecks.checkdate ORDER BY empchecks.checkdate SEPARATOR '<br /> ') as checkdate 
    FROM employees 
     INNER JOIN empchecks 
      ON employees.enum = empchecks.enum 
    WHERE empchecks.checkdate >= @begin_date 
     AND empchecks.checkdate <= @end_date 
    GROUP BY empchecks.enum; 
+0

はい、それはうまくいきます...私は14000回試したことを誓っていますが。しかし、日付を変数$ startdateに置き換えると、結果はまったくフィルタリングされません。私はページ1にその日付範囲を$ name = $ _POST ["startdate"]を持つページ2に送る入力ボックスを持っています。 $ startdateで日付を置き換える理由は、フィルタリングされていない結果を返します。 –

関連する問題