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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: рисую таблицу
 
 автор: zeeg   (02.02.2008 в 19:50)   письмо автору
 
 

Всем привет,
Никак не получается доделать таблицу. Рисунок того, что выходит прикрепил.
Не выходит прописать цену относительно заданному дню для каждой группы автомобилей.
Если не трудно покажите где не так делаю


    <table cellspacing='0' cellpadding='0' width="100%" border="1">
        <tr>
                   <td>Group</td>
                   <td>Sipp</td>
                   <td>Car type or similar</td>
                   <td>A / C</td>
      <?php
      $sql 
"SELECT DISTINCT rates.days
              FROM rates
              WHERE rates.country = '
$cntr_id' AND
                    rates.supplier = '
$supl_id'
              ORDER by id"
;
      
$res mysql_query($sql) or die("error in $sqlmysql_error());

          while(
$row mysql_fetch_assoc($res))
          {
// ДНИ В ШАПКЕ ТАБЛИЦЫ             
echo "<td>".$row['days']."</td>";
          }
       echo 
"</tr>";

// ВЫТАСКИВАЮ НАЗВАНИЯ ГРУПП АВОМОБИЛЕЙ
      
$sql "SELECT DISTINCT v_code.vc_name,
                              s_code.sc_name
              FROM rates, v_code, s_code
              WHERE rates.v_code = v_code.vc_id AND
                    rates.s_code = s_code.sc_id AND
                    rates.country = '
$cntr_id' AND
                    rates.supplier = '
$supl_id'
              order by id"
;
      
$res mysql_query($sql) or die("error in $sqlmysql_error());
    
            while(list(
$row['vc_name'],$row['sc_name']) = mysql_fetch_row($res))
              {
                  echo 
"<tr>";
                  echo 
"<td>".$row['vc_name']."</td>";
                  echo 
"<td>".$row['sc_name']."</td>";
                  echo 
"<td>ОПИСАНИЕ</td>";
                  echo 
"<td>ac</td>";

   
// ТУТ,ЦЕНЫ ДЛЯ КАЖДОГО ДНЯ. ДАЖЕ И НЕ ЗНАЮ ЧТО ПИСАТЬ. ДУМАЮ, ЧТО НУЖНО КАК-ТО СООТНЕСТИ ГРУППУ С ДНЕМ

                         
echo "</tr>";
              }
     
?>
    </table>

спасибо

   
 
 автор: Trianon   (02.02.2008 в 21:39)   письмо автору
 
   для: zeeg   (02.02.2008 в 19:50)
 

Вместо DISTINCT здесь напрашивается GROUP BY вкупе с агрегатом GROUP_CONCAT по rates.days

А прикреплять картинку BMP в 640К весом там , где её же GIF весит меньше 8К - свинство.

   
 
 автор: ZeeG   (02.02.2008 в 21:48)   письмо автору
 
   для: Trianon   (02.02.2008 в 21:39)
 

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

    <table cellspacing='0' cellpadding='0' width="100%" border="1" style="font-size: 9px;">
        <tr>
                   <td>Group</td>
                   <td>Sipp</td>
                   <td>Car type or similar</td>
                   <td>A / C</td>
      <?php
      $sql 
"SELECT DISTINCT rates.days
              FROM rates
              WHERE rates.country = '
$cntr_id' AND
                    rates.supplier = '
$supl_id'
              ORDER by days"
;
      
$res mysql_query($sql) or die("error in $sqlmysql_error());

         
$useddays = array();
          while(
$row mysql_fetch_assoc($res))
          {
             echo 
"<td>".$row['days']."</td>";
             
array_push($useddays$row['days']);
          }
          echo 
"</tr>";

     
$sqlg "SELECT DISTINCT v_code, s_code
              FROM rates, v_code, s_code
              WHERE rates.v_code = v_code.vc_id AND
                    rates.s_code = s_code.sc_id AND
                    rates.country = '
$cntr_id' AND
                    rates.supplier = '
$supl_id'
              ORDER BY id"
;
      
$resg mysql_query($sqlg) or die("error in $sqlgmysql_error());
      
$grup = array();
      
$sipp = array();
          while(
$rowg mysql_fetch_assoc($resg))
          {
              
array_push($grup$rowg['v_code']);
              
array_push($sipp$rowg['s_code']);
          }

       for (
$i=0$i<count($grup); $i++)
        {
            
$v $grup[$i];
            
$s $sipp[$i];

            
$sql "SELECT vc_name, sc_name
                    FROM v_code, s_code
                    WHERE vc_id = "
.$v." AND
                          sc_id = "
.$s."";
              
$res mysql_query($sql) or die("error in $sqlmysql_error());

            while(
$row mysql_fetch_assoc($res))
              {
                  echo 
"<tr>";
                  echo 
"<td>".$row['vc_name']."</td>";
                  echo 
"<td>".$row['sc_name']."</td>";
                  echo 
"<td>Discript</td>";
                  echo 
"<td>ac</td>";


                       foreach(
$useddays as $key => $val)
                        {
                       
$sqlp "SELECT rse_cost
                                FROM rates
                                WHERE rates.v_code = "
.$v." AND
                                      rates.s_code = "
.$s." AND
                                      rates.country = '
$cntr_id' AND
                                      rates.supplier = '
$supl_id' AND
                                      rates.days = '
$val'";
                       
$resp mysql_query($sqlp) or die("error in $sqlpmysql_error());
                       
$rate mysql_fetch_assoc($resp);
                          
$rate['rse_cost'] != "" $cost $rate['rse_cost'] : $cost " - ";
                          echo 
"<td>".$cost."</td>";
                        }
                       echo 
"</tr>";
              }
        }
     
?>
    </table>

Спасибо

   
 
 автор: ZeeG   (03.02.2008 в 01:40)   письмо автору
 
   для: ZeeG   (02.02.2008 в 21:48)
 

Что, ничего даже не режет? Должно же быть что-то.

   
 
 автор: Trianon   (03.02.2008 в 02:13)   письмо автору
 
   для: ZeeG   (03.02.2008 в 01:40)
 

Конечно, режет.
Формирование массы запросов внутри цикла режет.
Собственно, поэтому и тормозит.

Либо
SELECT  
       rates.cost, rates.days, 
       v_code.vc_name,
       s_code.sc_name
    FROM rates, v_code, s_code
    WHERE rates.v_code = v_code.vc_id AND
                    rates.s_code = s_code.sc_id AND
                    rates.country = '$cntr_id' AND
                    rates.supplier = '$supl_id'
    ORDER BY vc_name, sc_name, rates.days

со сложным последовательным погрупповым разбором результата.

Либо
SELECT  
       v_code.vc_name,
       s_code.sc_name,
       GROUP_CONCAT(
           CONCAT(rates.days,'=',rates.cost) 
           SEPARATE BY '/'
           ORDER BY rates.days ) AS cost_info
    FROM rates, v_code, s_code
    WHERE rates.v_code = v_code.vc_id AND
                    rates.s_code = s_code.sc_id AND
                    rates.country = '$cntr_id' AND
                    rates.supplier = '$supl_id'
    GROUP BY  vc_name, sc_name
    ORDER BY vc_name, sc_name

с простым построчным разбором результата
Но чуть более сложным переформатированием поля строки со списком цен.

Понятно, что если сервер старый (до 4.1.хх) где груп конкат не поддерживается,
то останется лишь первый вариант.

   
 
 автор: ZeeG   (03.02.2008 в 02:48)   письмо автору
 
   для: Trianon   (03.02.2008 в 02:13)
 

Тогда не пойму как переделать сам цикл. Ваш запрос конечно посимпатичней моего, но что-то я совсем запутался.

   
Rambler's Top100
вверх

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