Недавно столкнулся с нетривиальной задачей. Необходимо было вывесить на сайт дни рождения сотрудников организации. Но сразу же возник вопрос – где же их взять, каждого опрашивать конечно же не хотелось. Немного подумав – пришел к выводу что конечно же можно списки дней рождений можно взять в отделе кадров, но как их поместить на сайт? Создавать таблицу? Перебивать всех сотрудников в таблицу?
$myServer = "NameServer";
Пишем имя пользователя и пароль для доступа к к базе
$myUser = "login"; $myPass = "Pa$sw0rd";
$myDB = "DatabaseName";
Не помешает небольшая проверка на доступность SQL сервера и базы данных на SQL сервере
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");
Пишем запрос к определенным столбцам таблиц базы, в которых содержатся ФИО и дата дня рождения. Также в запросе делаем обработку для нормального представления даты.
В строке «bdate<=dateadd(d,5,getdate())» число «5″ означает количество отсортированных дат дней рождений
$query=" select name,birthdate from ( select r88._Description as 'name', convert(varchar(10),r105._Fld1300,104 ) as 'birthdate', convert(smalldatetime,convert(varchar,month(r105._Fld1300)) + '.' + convert(varchar,day(r105._Fld1300)) + '.' + convert(varchar, year(getdate())) ) as 'bdate' from _Reference88 r88 left join _Reference105 r105 on r88._Description=r105._Description ) employee where bdate>=getdate() and bdate<=dateadd(d,5,getdate()) order by bdate asc";
Данный запрос рекомендуется создать в виде хранимой процедуры в самой базе данных, чтобы пользователи сайта не создавали дополнительный лишний трафик и нагрузку на сервера.
Если вы создали регулярное выражение то закомментируйте предыдущий запрос и раскомментируйте строку ниже
//$query="execute [birthdates]";
Выводим результат запроса в виде небольшой таблицы
$result = mssql_query($query);
$numRows = mssql_num_rows($result);
echo "<table cellspacing=0><tr>ФИО<th></th><th>Дата</th></tr>";
while($row = mssql_fetch_array($result))
{
echo "<tr><td>" . $row["name"] . "</td>
<td>" . $row["birthdate"] . "</td></tr>";
}
echo "</table>";
mssql_close($dbhandle);
Ну вот и все. Данный кусочек скрипта можно вставить например в какой-либо блок на вашем корпоративном портале, или только определенному кругу лиц, чтоб не забывали дни рождения
В итоге у вас должно получиться что то вроде этого:
<?php
$myServer = "NameServer";
$myUser = "login";
$myPass = "Pa$sw0rd";
$myDB = "DatabaseName";
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");
$query=" select name,birthdate from (
select r88._Description as 'name',
convert(varchar(10),r105._Fld1300,104 ) as 'birthdate',
convert(smalldatetime,convert(varchar,month(r105._Fld1300)) + '.'
+ convert(varchar,day(r105._Fld1300)) + '.'
+ convert(varchar, year(getdate())) ) as 'bdate'
from _Reference88 r88
left join _Reference105 r105 on r88._Description=r105._Description
) employee
where bdate>=getdate() and bdate<=dateadd(d,5,getdate())
order by bdate asc";
//$query="execute [birthdates]";
$result = mssql_query($query);
$numRows = mssql_num_rows($result);
echo "<table cellspacing=0><tr>ФИО<th></th><th>Дата</th></tr>";
while($row = mssql_fetch_array($result))
{
echo "<tr><td>" . $row["name"] . "</td>
<td>" . $row["birthdate"] . "</td></tr>";
}
echo "</table>";
mssql_close($dbhandle);
?>