Как проверить лучших сотрудников года
Это моя таблица MySQL:
_______________________________________________
Id | Name| Employee id | Date | Attendance
_______________________________________________
1 | xyz | 196 | 2013-04-01 | present
2 | xyz | 196 | 2013-04-02 | present
3 | xyz | 196 | 2013-04-03 | present
4 | xyz | 196 | 2013-04-04 | absent
5 | xyz | 196 | 2013-04-05 | present
6 | abc | 197 | 2013-04-01 | present
7 | abc | 197 | 2013-04-02 | present
8 | abc | 197 | 2013-04-03 | present
9 | abc | 197 | 2013-04-04 | present
10 | abc | 197 | 2013-04-05 | present
_______________________________________________
Я хочу посчитать дни, в которых сотрудники в основном присутствуют, и я хочу получить такой результат в PHP:
___________________________________________________________
Name| Employee id| Attendance | Best OR NOT
___________________________________________________________
xyz | 196 | 4 Present days |
abc | 197 | 5 Present days | This is best employees of the year
__________________________________________________________________________
Как я могу это сделать?
5 ответов
Попробуй это.
$query = mysql_query("select name ,`Employee id` as emplyee_id, CONCAT(count(`Employee id`),' Present days') as Attendance
from Table1
where `Attendance` = 'present' group by `Employee id` ");
while($row = mysql_fetch_array($query)) {
echo $row['name']. " - " .$row['emplyee_id']. " - " .$row['Attendance']."</ br>";
}
SQL
SELECT name, employeeID count(userID) as datesAttend FROM Attendance GROUP BY name
PHP (метод класса mysql, просто пример)
/* mysql_query example ( use beter db class ) */
$best = 0;
$bestEmployee = '';
$query = mysql_query("SELECT Name, EmployeeID, count(EmployeeID) as datesAttend FROM Attendance GROUP BY EmployeeID");
while($row = mysql_fetch_array($query)) {
echo $row['Name']. " " .$row['EmployeeID']. " " .$row['datesAttend'];
if($row['datesAttend'] > $best) {
$best = $row['datesAttend'];
$bestEmployee = $row['EmployeeID'];
}
}
echo $bestEmployee ." is employee of the year!!!";
throw PartyForEmployee();
Пример: http://www.sqlfiddle.com/
Попробуйте этот запрос..
SELECT *, COUNT(employee_id) AS cnt, CASE WHEN employee_id = (SELECT employee_id FROM employees
WHERE 1 GROUP BY employee_id ORDER BY COUNT(employee_id) DESC LIMIT 0 , 1) THEN 'Best'
ELSE 'Not' END AS avl
FROM `employees`
WHERE 1
GROUP BY employee_id
Измените имя таблицы и имя поля в соответствии с вашими потребностями
Этот запрос даст вам лучшего сотрудника:
select Name, "Employee id", count(*)
from table_name
where Attendance = "present"
group by Name
order by count(*) desc
limit 1;
Предложение group by означает, что вы хотите получить отдельный результат для каждого сотрудника. Предложение "где" гарантирует, что вы не будете считать дни, когда они отсутствовали. Условие "заказ по" ставит на первое место сотрудников с наибольшим количеством дней. Предложение limit ограничивается первым, поскольку вы хотите только лучшее.
Такой запрос:
select employeeId, count(employeid) as num from table_name group by attendence limit 1
даст вам лучший идентификатор работника. И вы можете редактировать таблицу, вставив ее в нужное место. Также не могли бы вы объяснить свой вопрос немного больше?
//DB_HOST etc. are db connection constants
$dbc=mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$data = mysql_query('your query') or die(mysql_error());
// A COUNT query will always return 1 row
// Use fetch_assoc it's easier to use
$row = mysql_fetch_assoc($data);
$bestId = $row['employeeId'];
$bestDayNumber = $row['num'];