如何在mysql中从同一个表创建基于树的查询?

时间:2017-11-13 16:46:31

标签: php mysql

嘿伙计们,我想在mysql的html视图中创建一个基于树的数据。 我有一个表salary_slip有2列pay_monthpay_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

所以现在我想创建相同的树视图。如果用户点击2016(pay_year),点击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

2 个答案:

答案 0 :(得分:2)

您问题的主要部分来自GROUP BY的使用,它用于分组。

MySQL对GROUP BY的处理方式与其他DBMS不同,需要在GROUP BY子句中列出所有非聚合字段。 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)让它加载年份,然后异步加载下一级。

获得多年的SQL查询:

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

答案 1 :(得分:0)

问题是你的小组,你只想按年份订购:

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