Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Разбор массива после запроса с объединением таблиц

Сообщения:  [1-10]    [11-20]  [21-24] 

 
 автор: Trianon   (13.04.2010 в 11:48)   письмо автору
 
   для: куч1963   (13.04.2010 в 11:15)
 

JOIN может иметь условие ON
а CROSS JOIN ( или запятая) - не может. По сути смысла.

  Ответить  
 
 автор: куч1963   (13.04.2010 в 11:15)   письмо автору
 
   для: Trianon   (13.04.2010 в 10:38)
 

И еще один вопрос в эту тему.
Почему в запросе, если писать
FROM
  students
 INNER JOIN event

То запрос проходит, а если
FROM
  students,  event

То выдается ошибка. Ведь по сути эти записи эквивалентны?

  Ответить  
 
 автор: Trianon   (13.04.2010 в 10:38)   письмо автору
 
   для: куч1963   (13.04.2010 в 10:24)
 

так, в принципе, тоже можно.
Попробуем разобрать плюсы и минусы.
плюсы: один запрос вместо двух
минусы: Сильно осложненная логика алгоритма, запутанный код, и самое главное - необходимость накапливать выходной поток в переменных.. А значит - изрядные требования к скрипту по памяти.
Впрочем, еще один плюс -- этот вариант Вы самостоятельно не только реализовали, но и придумали.

PS. Основная цель моей деятельности на этом портале - делиться логикой мышления с другими людьми. Вернее даже - менять эту логику.
PPS. Я оценил, насколько аккуратно Вы отвечаете.

  Ответить  
 
 автор: куч1963   (13.04.2010 в 10:24)   письмо автору
 
   для: 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",
                
$flaghtmlspecialchars($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 К сожалению, при общении с людьми, мы мало уделяем внимания тому факту, что логика мышления у людей разная.

  Ответить  
 
 автор: Trianon   (13.04.2010 в 09:23)   письмо автору
 
   для: куч1963   (13.04.2010 в 02:04)
 

Да уж. В жизни бы не догадался.
Знаете, что Вы не сделали?
Вы не обвели жирным шапку Вашей таблицы. Не показали, что это отдельный поток данных.
Нет ничего зазорного в том, чтобы вытащить данные шапки отдельным - более простым запросом.
Уж коль скоро Вам все равно нужно все события показывать, а не только те, по которым оценки имеются.

И там не нужна будет возня с флагами.

PS. Хотеть больше, чем умеешь выразить - хотеть лишнего.

  Ответить  
 
 автор: куч1963   (13.04.2010 в 02:04)   письмо автору
12.1 Кб
 
   для: Trianon   (13.04.2010 в 01:01)
 

Я не прав. Нарисовал, как это должно выглядеть. Событие - название темы занятия.

PS уметь объяснить, что ты хочешь, может далеко не всякий.

  Ответить  
 
 автор: Trianon   (13.04.2010 в 01:01)   письмо автору
 
   для: куч1963   (13.04.2010 в 00:10)
 

а вторая?
а третья?
А второй третий студенты?
name это имя события или имя студента?
если имя события, то что такое событие1, 2 и так далее?
если имя студента, то что такое ФИО?
1, 2 это нумерация сквозная или внутри одного студента?

Вы издеваетесь.

Теперь, впрочем, я устал объяснять и этот последний тезис тоже.

  Ответить  
 
 автор: куч1963   (13.04.2010 в 00:10)   письмо автору
 
   для: Trianon   (12.04.2010 в 23:59)
 

Вы наверное устали объяснять мне прописные истины, но к сожалению - трудно доходит:((
Вывод должен быть таким:
первая строка:
ФИО/событие1/событие2/.....</tr>
name/оценка1/оценка2/...</tr>

Я благодарен Вам, за то, что потратили на объяснение свое время.

  Ответить  
 
 автор: Trianon   (12.04.2010 в 23:59)   письмо автору
 
   для: куч1963   (12.04.2010 в 23:57)
 

Зачем еще одно условие?
У Вас на одного студента несколько событий?

Вы приведите пример выдачи, так чтобы можно было понять сколько каких строк откуда выводится.


PS.А впрочем, лучше не приводите.

  Ответить  
 
 автор: куч1963   (12.04.2010 в 23:57)   письмо автору
 
   для: 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']));




как закрыть его, и передать дальше

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-24] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования