嘿伙计们,我想在mysql的html视图中创建一个基于树的数据。
我有一个表salary_slip
有2列pay_month
和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
所以现在我想创建相同的树视图。如果用户点击2016(pay_year),点击2016年前面的pay_month中的所有数据应该以树格式显示,并且全部相同。
我目前的查询是:
select
PAY_MONTH,
PAY_YEAR
from
india_salary_slip_details
where
EMPLOYEE_ID = 34
group by
pay_year
通过这个我得到了我的数据: 但我只能看到每年的第一个月。 请提供更好的查询,以便我得到我的结果。
答案 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