|
|
|
|
|
для: куч1963
(13.04.2010 в 11:15)
| | JOIN может иметь условие ON
а CROSS JOIN ( или запятая) - не может. По сути смысла. | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2010 в 10:38)
| | И еще один вопрос в эту тему.
Почему в запросе, если писать
FROM
students
INNER JOIN event
|
То запрос проходит, а если
То выдается ошибка. Ведь по сути эти записи эквивалентны? | |
|
|
|
|
|
|
|
для: куч1963
(13.04.2010 в 10:24)
| | так, в принципе, тоже можно.
Попробуем разобрать плюсы и минусы.
плюсы: один запрос вместо двух
минусы: Сильно осложненная логика алгоритма, запутанный код, и самое главное - необходимость накапливать выходной поток в переменных.. А значит - изрядные требования к скрипту по памяти.
Впрочем, еще один плюс -- этот вариант Вы самостоятельно не только реализовали, но и придумали.
PS. Основная цель моей деятельности на этом портале - делиться логикой мышления с другими людьми. Вернее даже - менять эту логику.
PPS. Я оценил, насколько аккуратно Вы отвечаете. | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2010 в 09:23)
| | Я всегда внимательно разбираю ваши советы и приведенные решения.
В том коде, что Вы привели, есть всё необходимое для решения моей задачи.
Правда флаг пришлось поставить, и собрать в одну переменную первую строку, все остальное в другую.
Получилось так.
<?
$flag = ''; // студент не открыт
$roll_st="";
$zag_td ="";
$break_1_row=0;
while ($row = mysql_fetch_assoc($ctg))
{
if($flag != $row['student_id']) // ситуация нового студента
{
if($flag !== ''){ // при открытом старом
$zag_td .="</tr>\r\n";
$roll_st .= "</tr>\r\n";
$break_1_row=1;
}
$flag = $row['student_id'];
if($break_1_row==0){
$zag_td .= sprintf("<tr><th>\"%s\"</th>\r\n", "FIO" );
}
$roll_st .= sprintf("<tr id=\"st_%d\"><th>\"%s\"</th>\r\n",
$flag, htmlspecialchars($row['st_name']) );
}
if($break_1_row==0){
$zag_td .= sprintf(" <td>\"%s\"</td>\r\n",$row['e_name'] );
}
$roll_st .= sprintf(" <td>\"%s\"</td>\r\n", $row['score']);
}
echo $zag_td;
echo $roll_st;
if($flag !== '') //если студент остался открыт
echo "</tr>\r\n";
echo "</table>\r\n";
|
Наверняка, снова есть косяки, но все выводит как надо. Огромное спасибо за разъяснения и помощь в решении этой задачи. Даже в принципе, если учитывать тот факт, что в html не предъявляется особых требований к закрывающим /tr, то можно еще дальше модифицировать:))
PS К сожалению, при общении с людьми, мы мало уделяем внимания тому факту, что логика мышления у людей разная. | |
|
|
|
|
|
|
|
для: куч1963
(13.04.2010 в 02:04)
| | Да уж. В жизни бы не догадался.
Знаете, что Вы не сделали?
Вы не обвели жирным шапку Вашей таблицы. Не показали, что это отдельный поток данных.
Нет ничего зазорного в том, чтобы вытащить данные шапки отдельным - более простым запросом.
Уж коль скоро Вам все равно нужно все события показывать, а не только те, по которым оценки имеются.
И там не нужна будет возня с флагами.
PS. Хотеть больше, чем умеешь выразить - хотеть лишнего. | |
|
|
|
|
 12.1 Кб |
|
|
для: Trianon
(13.04.2010 в 01:01)
| | Я не прав. Нарисовал, как это должно выглядеть. Событие - название темы занятия.
PS уметь объяснить, что ты хочешь, может далеко не всякий. | |
|
|
|
|
|
|
|
для: куч1963
(13.04.2010 в 00:10)
| | а вторая?
а третья?
А второй третий студенты?
name это имя события или имя студента?
если имя события, то что такое событие1, 2 и так далее?
если имя студента, то что такое ФИО?
1, 2 это нумерация сквозная или внутри одного студента?
Вы издеваетесь.
Теперь, впрочем, я устал объяснять и этот последний тезис тоже. | |
|
|
|
|
|
|
|
для: Trianon
(12.04.2010 в 23:59)
| | Вы наверное устали объяснять мне прописные истины, но к сожалению - трудно доходит:((
Вывод должен быть таким:
первая строка:
ФИО/событие1/событие2/.....</tr>
name/оценка1/оценка2/...</tr>
Я благодарен Вам, за то, что потратили на объяснение свое время. | |
|
|
|
|
|
|
|
для: куч1963
(12.04.2010 в 23:57)
| | Зачем еще одно условие?
У Вас на одного студента несколько событий?
Вы приведите пример выдачи, так чтобы можно было понять сколько каких строк откуда выводится.
PS.А впрочем, лучше не приводите. | |
|
|
|
|
|
|
|
для: Trianon
(12.04.2010 в 23:31)
| | Нужно добавлять еще одно условие и флаг?
Сейчас пробую это сделать на вашем примере, не выходит.
if($flag1 != $row['id_event']) // новая строка
{
if($flag1 !== '') // при открытом старом
echo "</tr>\r\n";
$flag1 = $row['id_event'];
printf("<tr id=\"ev_%d\"><th>\"%s\"</th>\r\n", $flag1, "FIO" );
}
printf(" <td>\"%s\"</td>\r\n",htmlspecialchars($row['e_name']));
|
как закрыть его, и передать дальше | |
|
|
|
|