2017-11-13 7 views
1

ちょっと私は、MySQLのHTMLビューで1つのツリーベースのデータを作成したい。 私は2つの列pay_monthpay_yearのあるテーブルsalary_slipを持っています。mysqlの同じテーブルからツリーベースのクエリを作成する方法は?

データはこのようなものです:ユーザーは2016(pay_year)をクリックするかどう

pay_month  pay_year 

February   2014 
march   2014 
January   2015 
February   2015 
April   2015 
may    2015 
June    2015 
January   2016 
march   2016 
December   2016 

はだから今、私は、same.soのツリービューを作成したいのonclick 2016の前でpay_monthでこのすべてのデータをすべきですツリー形式で表示することも、すべて同じ形式で表示することもできます。私は私のデータだ。これにより

select 
    PAY_MONTH, 
    PAY_YEAR 
from 
    india_salary_slip_details 
where 
    EMPLOYEE_ID = 34 
group by 
    pay_year 

私の現在のクエリがある をしかし、私は、各年の最初の月だけ見ることができます。 より良いクエリを私に提供してください。私は私の結果を得ることができます。同じのため

画像:current data from my query

+0

クエリからして、グループを削除する年を取得する

SQLクエリに。 –

+0

あなたがグループbyを使用すると、あなたはどこで使うことはできません。あなたは代わりに –

答えて

0

問題は、あなたのグループは、あなただけの一年で注文したい、である:

SELECT PAY_MONTH, PAY_YEAR, FROM india_salary_slip_details WHERE EMPLOYEE_ID = 34 
ORDER BY PAY_YEAR 
+0

の助けを借りてくれたことに感謝しますが、私はこの種のデータを表示したくありません。私のイメージを見ればわかります。 –

2

あなたの問題の大部分はGROUP BYの使用、から来ていますグループ分けのために使用されます。

MySQLはGROUP BY節にすべての非集計フィールドをリストする必要がある他のDBMSとは異なる処理を行います。 MySQLはあなた自身を吊り下げるのに十分なロープを与えます。なぜなら、明らかに意図されていないものがGROUP BYのものではないというエラーが出なかったからです。

フロントエンドのデータ処理方法によっては、いくつかの選択肢があります。

オプション1)ロードループ(順序付け)を行い、出力ループを使用して年の変更を判断します。

SQLクエリ:

SELECT 
    PAY_MONTH, 
    PAY_YEAR 
FROM 
    india_salary_slip_details 
WHERE 
    EMPLOYEE_ID = 34 
ORDER BY 
    pay_year, 
    pay_month -- we want it ordered by year, then month, though this will be alphabetical due to the data type 

PHPコード:

<?php 
$year = NULL; 
foreach ($result as $row) { // Assuming your result is stored as $result 
    if ($row['PAY_YEAR'] !== $year) { 
     // Print the year in the left column so to speak, perhaps create a sublist, etc 
     // Set the year 
     $year = $row['PAY_YEAR']; 
    } 
    // Add month 
    // Do something with $row['PAY_MONTH'], perhaps add it to a sublist, again, depends on front end handling. 
} 

オプション2)非同期その後、次のレベル、それは何年ロード持っています。今年与えられたヶ月を取得するには

SELECT DISTINCT 
    PAY_YEAR 
FROM 
    india_salary_slip_details 
WHERE 
    EMPLOYEE_ID = 34 
ORDER BY 
    PAY_YEAR 

SQLクエリ:

SELECT 
    PAY_MONTH 
FROM 
    india_salary_slip_details 
WHERE 
    EMPLOYEE_ID = 34 
    AND PAY_YEAR = (Whatever the year is) 
ORDER BY 
    PAY_MONTH 
関連する問題