[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: цикл while
pultter
здравствуйте.
думаю, посмотрев на картинки вы все поймете...
user posted image
а вот вторая...
user posted image

как исправить эту ситуацию?
вот мой код:

$query_pupils = mysql_query("SELECT * FROM pupils");
$query_attendance = mysql_query("SELECT * FROM attendance ORDER BY date");
print "<a href=index.php>Назад</a>";
print " <table width=100% border=1>
<tr>
<td width=15% align=center>Ф.И.</td>"
;
$id = 1;
while ($row_attendance = mysql_fetch_array($query_attendance)) {
print " <td align=center>".$row_attendance['date']."</td>";
while ($row_pupils = mysql_fetch_array($query_pupils)) {
print " <tr><td>".$id++.". ".$row_pupils['name']."</td>";
}
print " <td align=center>".$row_attendance['attendance']."</td>";
}




Спустя 49 минут, 24 секунды (14.12.2009 - 23:55) VolCh написал(а):
Какая задача-то стоит? В каждой строке напротив фамилии поставить в столбик плюсики или минусики? attendance и pupils вообще никак не связаны?

Но в любом случае нужно сначала сформировать шапку таблицы, а потом её тело

Спустя 15 часов, 3 минуты, 45 секунд (15.12.2009 - 14:59) pultter написал(а):
да.. что то насчет связи я стормозил.. еще подумал немного и переделал скрипт на такой:

$query_pupils = mysql_query("SELECT * FROM pupils");
$query_date = mysql_query("SELECT * FROM attendance ORDER BY date");
print "<a href=index.php>Назад</a>";
print " <table width=100% border=1>
<tr>
<td width=15% align=center>Ф.И.</td>"
;
$id = 1;
while ($row_date = mysql_fetch_array($query_date)) {
print " <td align=center>".$row_date['date']."</td>";
while ($row_pupils = mysql_fetch_array($query_pupils)) {
print "<tr><td>".$row_pupils['name']."</td>";
$query_attendance = mysql_fetch_array(mysql_query("SELECT * FROM attendance WHERE id_pupils='".$row_pupils['id']."' AND date='".$row_date['date']."'"));
print " <td>".$query_attendance['attendance']."</td>";
}
}



Я так понимаю, что нужно, чтобы сначала писалась дата (следующий столбец почле ФИ), потом имя (создаются следующие n строчек), дальше - был человек или нет, т.е. ставим плюс или минус (следующий столбец после имени)... но как сделать, чтобы цикл снова возвращался на первую строчку и снова печатал там дату, потом спускался и печатал плюсики и минусы? не пойму никак...

Спустя 1 день, 7 часов, 4 минуты, 54 секунды (16.12.2009 - 22:04) pultter написал(а):
неужели нет решения на мой вопрос?

Спустя 12 минут, 7 секунд (16.12.2009 - 22:16) VolCh написал(а):
Сначала одним циклом печатаешь даты, а потом вторым (и вложенным в него третьим) печатаешь строчки с плюсиками

Спустя 11 минут, 57 секунд (16.12.2009 - 22:28) pultter написал(а):
VolCh, благодарю...:-) все получилось....
$query_pupils = mysql_query("SELECT * FROM pupils");
$query_date = mysql_query("SELECT * FROM attendance ORDER BY date");
print "<a href=index.php>Назад</a>";
print " <table width=100% border=1>
<tr>
<td width=15% align=center>Ф.И.</td>"
;
$id = 1;
while ($row_date = mysql_fetch_array($query_date)) {
print " <td>".$row_date['date']."</td>";
}
while ($row_pupils = mysql_fetch_array($query_pupils)) {
print " <tr>
<td>"
.$row_pupils['name']."</td>";
$query_attendance = mysql_query("SELECT * FROM attendance WHERE id_pupils='".$row_pupils['id']."'");
while ($row_attendance = mysql_fetch_array($query_attendance)) {
print " <td align=center>".$row_attendance['attendance']."</td>";
}
}

Спустя 11 минут, 22 секунды (16.12.2009 - 22:39) VolCh написал(а):
Ага, что-то в этом роде, если оптимизация не сильно заботит wink.gif Хотя можно обойтись, как максимум двумя запросами - первым выбрать все даты, вторым всё остальное

Спустя 11 минут, 50 секунд (16.12.2009 - 22:51) twin написал(а):
Можно и одним циклом обойтись. Я вот только не догнал, таблицы в бд не связаны никак?

Спустя 26 минут, 19 секунд (16.12.2009 - 23:17) twin написал(а):
Вот так примерно. А о связях подумай... Наставишь плюсиков кому попало.
<?php

$query_pupils = mysql_query("SELECT * FROM pupils");
$query_date = mysql_query("SELECT * FROM attendance ORDER BY date");

print "<a href=index.php>Назад</a>";
print " <table width=100% border=1>\n"
$tr1 = "<tr>
<td width=15% align=center>Ф.И.</td>
\n";
$tr2 = "<tr>\n";
while ($row_pupils = mysql_fetch_assoc($query_pupils))
{
$tr2 .= "<td width=15% align=center>". $row_pupils['name'] ."</td>\n";

while ($row_date = mysql_fetch_array($query_date))
{
$tr1 .= " <td align=center>".$row_date['date']."</td>\n";
$tr2 .= " <td>".$row_date['attendance']."</td>\n";
}

}


print $tr1 ."</tr>\n<tr>\n". $tr2 . "</tr>\n</table>\n"

Спустя 1 день, 22 часа, 50 минут, 34 секунды (18.12.2009 - 22:08) pultter написал(а):
twin, не знаю.. может я что не так делаю, но вот так получилось твоим скриптом
user posted image
а вот так моим (с подсказки VolCh):
user posted image
и еще у тебя пару ; не хватало...
ну это ладно... я уже решил проблему.. только теперь другие вопросы возникли:
на второй картинке видно, что у меня дата 15.12 печатается кучу (ровно столько сколько человек) раз.. как сделать чтобы она печаталась один раз?
таблица attendance у меня такая
id | id_pupils | date | attendance
1 | 10 | 15.12 | +
2 | 12 | 15.12 | -
и т.д. как исправить эту ошибку?

и еще вопрос не в тему: как сложить строки и столбцы?

Спустя 8 минут, 42 секунды (18.12.2009 - 22:16) VolCh написал(а):
$query_date сделай вроде
SELECT date DISTINCT FROM attendance ORDER BY date


И еще, у тебя в таблице на каждого человека и на каждую дату есть записи, или может быть +, может быть -, а может вообще записи не быть?

Спустя 7 минут (18.12.2009 - 22:23) pultter написал(а):
в таблице все поля заполнены в любом случае

Спустя 12 минут, 20 секунд (18.12.2009 - 22:36) VolCh написал(а):
тогда должно и так заработать, правда непонятно, почему у некоторых одна ячейка, а некоторых две

Спустя 48 минут, 34 секунды (18.12.2009 - 23:24) pultter написал(а):
VolCh, ты если заметил, там в конце есть еще дата 21.12 и я отметил в этой дате только двух человек. поэтому он сюда и напечатал...

Спустя 6 минут, 1 секунда (18.12.2009 - 23:30) VolCh написал(а):
А говорил в любом случае wink.gif Если при эксплуатации такое тоже не исключено, то надо предусмотреть тоже вариант, что дата есть в таблице (html), а в БД записи для какого-то человека на эту дату нет

Спустя 2 минуты, 14 секунд (18.12.2009 - 23:33) pultter написал(а):
для отдельного человека строка в БД заполняется полностью.. а тут на мой взгляд все отлично работает, кроме того, что одна дата печатается целых 8 раз..

Спустя 56 секунд (18.12.2009 - 23:34) VolCh написал(а):
Так запрос с DISTINCT делал?

Спустя 1 минута, 43 секунды (18.12.2009 - 23:35) pultter написал(а):
нет еще.. что то дел куча.. но сейчас попробую.. а если не получится еще завтра буду думать.. а если совсем никак напишу еще.. спасибо за помощь, кстати:-)

Спустя 4 минуты, 30 секунд (18.12.2009 - 23:40) pultter написал(а):
VolCh, а что такое DISTINCT? чего она делает эта функция? почитал тут в гугле... ничего не понял... не знаю, может уже голова просто не варит... спать пора

Спустя 8 минут, 10 секунд (18.12.2009 - 23:48) pultter написал(а):
все получилось!!! ура!:-) я понял для чего ты спрашивал про заполнение всей таблицы. :-) она будет заполняться вся. без пропусков у отдельных людей...

Спустя 4 минуты, 13 секунд (18.12.2009 - 23:52) VolCh написал(а):
Цитата (pultter @ 19.12.2009 - 00:40)
VolCh, а что такое DISTINCT? чего она делает эта функция? почитал тут в гугле... ничего не понял... не знаю, может уже голова просто не варит... спать пора

Дублирующиеся строки в результате она пропускает, только разные выдаёт


_____________
Напишу индусский код. Бесплатно
Быстрый ответ:

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