[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SELECT
Kumirska
Уважаемые форумчане! Вопрос такой:
я создаю форму для отчёта,в которую попадает информация из базы по отделам и сотрудникам,табличка банальна и не сложна,она по сути вовсе не является важной частью работы,но препод сказал что "вывод на печать" должен быть! Показуху видно везде любят) но вопрос для меня интересный=)
у меня выводится табличка,я ее прикрепил к сообщению. Отделы выводятся в цикле через printf. Сотрудники хранятся в таблице works. Поле id таблицы otdel совпадает с полем otdel таблицы works. (загнул)Но вот в столбце сотрудники я столкнулся с проблемой,у меня выводится только первый сотрудник,а нужно чтоб в столбик "сотрудники" попадали все сотрудники из данного отдела.

......
$rep = mysql_query("SELECT id,title,kolvo_sotr FROM otdel WHERE kolvo_sotr > 0 ORDER BY title",$db);

$q1 = mysql_query("SELECT SUM(q_vote) as sum_q, SUM(reiting) as sum_r FROM works GROUP BY otdel ORDER by title",$db);
?>

<table align="center" border="1" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="font">

<
tr height="50px">
<
td width="220"><center><b>ОТДЕЛ</b></center></td>
<
td width="120"><center><b>КОЛ-ВО СОТРУДНИКОВ</b></center></td>
<
td width="100"><center><b>РЕЙТИНГ</b></center></td>
<
td width="56" ><center><b>КЭ(%)</b></center></td>
<
td width="250"><center><b>СОТРУДНИКИ</b></center></td>
</
tr>

<?
$sotrud1 = mysql_query("SELECT name,fam,otch FROM works GROUP by otdel ORDER BY title",$db);
$sotrud = mysql_fetch_assoc($sotrud1);




while ($report=mysql_fetch_assoc($rep) and $q = mysql_fetch_assoc($q1))
{
if ($q['sum_q']>0)
{
$r = $q['sum_r']*20/$q['sum_q'];
$r = (int)$r;
}
else {$r = 0;}
printf ("
<tr height='45px' >
<td width='220'><center>%s</center></td>
<td width='100'><center>%s</center></td>
<td width='100'><center>%s</center></td>
<td width='56'><center>%s</center></td>
<td width='250'><center>%s %s %s<br></center></td>
</tr> "
,$report["title"],$report["kolvo_sotr"],$q["sum_r"],$r,$sotrud["fam"],$sotrud["name"],$sotrud["otch"]);
}?>


Проблема в том что я не понимаю как вывести в столбик отдела всех сотрудников построчно,мне приходит в голову цикл while с выводом всех сотрудников по полю отдел,но я ума не приложу как выполнить этот цикл в цикле,еще и внутри printf. Одним словом встрял



Спустя 1 час, 18 минут, 30 секунд (17.05.2011 - 19:30) inpost написал(а):
Берёшь фотошоп и изображаешь то, что хочешь, и как есть сейчас. Потому что на словах непонятно, что именно ты хочешь smile.gif

Спустя 3 часа, 54 минуты, 59 секунд (17.05.2011 - 23:25) kirik написал(а):
Kumirska
А почему должны выводиться все сотрудники, если вы только одного, первого выводите?
Я про запрос SELECT name,fam,otch FROM works GROUP by otdel ORDER BY title и про один единственный mysql_fetch_assoc для этого запроса.

Спустя 23 минуты, 54 секунды (17.05.2011 - 23:49) Kumirska написал(а):
inpost,спасибо что откликнулся,у меня проблемы с кабелем который идет к дому,тобешь интернетом моим,этип ушлёпкам звонил сказал приедут починят,но так и не приехали,так что малейший ветерок и славно качающее дерево лишает обрывает связь каждые 3-4 минуты)
поэтому уже свесил руки так как сам не могу сделать и в нэт толком зайти не получилось.
чёт целая поэма)

kirik, чтоб вывести в последнем столбике всех сотрудников надо использовать ведь тоже цикл,я пробовал по-разному и искала в гугле,но трудно найти именно тот случай что мне нужен. А цикл в цикле еще и внутри printf у меня пока не хватает опыта понять как его сделать.

Спустя 7 часов, 10 минут, 29 секунд (18.05.2011 - 07:00) kirik написал(а):
Цитата (Kumirska @ 17.05.2011 - 16:49)
чтоб вывести в последнем столбике всех сотрудников надо использовать ведь тоже цикл

Верно

Цитата (Kumirska @ 17.05.2011 - 16:49)
цикл в цикле еще и внутри printf у меня пока не хватает опыта понять как его сделать.

А его не надо в printf пихать (тем более что не получится).
Сделай отдельно цикл типа:
$arr = array();
while($row = mysql_fetch_assoc($query)) {
$arr[] = $row['name'] . ' ' . $row['surename'];
}

и потом где нужно вывести список сотрудников:
echo implode("<br />\n", $arr);

Спустя 3 часа, 27 минут, 32 секунды (18.05.2011 - 10:27) Kumirska написал(а):
implode -- Объединяет элементы массива в строку,как раз то что мне было нужно.


$rep = mysql_query("SELECT id,title,kolvo_sotr FROM otdel WHERE kolvo_sotr > 0 ORDER BY title",$db);

$q1 = mysql_query("SELECT SUM(q_vote) as sum_q, SUM(reiting) as sum_r FROM works GROUP BY otdel ORDER by title",$db);
...


while ($report=mysql_fetch_assoc($rep) and $q = mysql_fetch_assoc($q1))
{


if ($q['sum_q']>0)
{
$r = $q['sum_r']*20/$q['sum_q'];
$r = (int)$r;
}
else {$r = 0;}

$query = mysql_query("SELECT name,fam FROM works WHERE otdel = '$id'",$db);
$arr = array();
while($row = mysql_fetch_assoc($query)) {
$arr[] = $row['name'] . ' ' . $row['fam'];
}

printf ("
<tr height='45px' >
<td width='220'><center>%s</center></td>
<td width='100'><center>%s</center></td>
<td width='100'><center>%s</center></td>
<td width='56'><center>%s</center></td>
<td width='200' ><center>%s</center></td>
</tr> "
,$report["title"],$report["kolvo_sotr"],$q["sum_r"],$r,implode("<br />\n", $arr));
}


KIRIK, я правильно тебя понял надеюсь,я для начала чтоб сразу не усложнять не стал группировать и тп,а просто засунул запрос в цикл чтоб вытаскивать по id отдела,так как они совпадают со значениями поля otdel напротив сотрудников в таблице works. Но к сожалению ничего не выдаёт(


_____________
никому не дано знать абсолютной истины, ибо понятия, которыми мы оперируем, сами по себе относительны
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.