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

Форум MySQL

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

 

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

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

тема: результат запроса в таблицу с плавающими столбцом и строкой
 
 автор: oppo   (02.07.2008 в 17:26)   письмо автору
 
 

З таблицы

Таблица #__gintur_numera (номера)

-----------------------------------
id  description dop otel
-----------------------------------
3    Номер1        1        2
4    Номер2        1        2
5    Номер3        1        2
6    Номер4        1        2


Таблица #__gintur_pricing (заезды)
---------------------------------
id    otel      title
------------------------------------------
16    2      Заезд1
18    2      Заезд2
19    2      Заезд3


Таблица #__gintur_zaezdid (заезды)
Формируется после сохранения данных из (номера) id=numerid dop=dopzaezd
и (заезды) zaezdid

а также заполнения своих полей цена (zena) и места (mesta )

---------------------------------------------------
zaezdid    numerid     dopzaezd  otel     zena mesta
----------------------------------------------------
16         3                 1                  2     6        есть 
16         4                 1                  2     6        есть 
16         5                 1                  2     7        нет
16         6                 1                  2     5        есть 
19         3                 1                  2     9        есть 
19         4                 1                  2     15     нет 
19         5                 1                  2     55     есть 
19         6                 1                  2     55     есть 
18         3                 1                  2     55     нет 
18         4                 1                  2     55     есть 
18         5                 1                  2     55     есть 
18         6                 1                  2     55     есть  


ВОПРОС КАК ВЫВЕСТИ такую таблицу
если заголовок Заезды формируется от кол-ва Заездов //Таблица #__gintur_zaezdid (заезды)
а первая колонка Номер от кол-ва номеров / /Таблица #__gintur_numera (номера)
а цена/места/скидки берется соответственно из таблицы #__gintur_zaezdid zena/mesta/dopzaezd для каждого номера и заезда

## | Заезд1 | Заезд2 | Заезд3
=================================================
Номер1 | цена/места/скидки | цена/места/скидки | цена/места/скидки

Номер2 | цена/места/скидки | цена/места/скидки | цена/места/скидки

Номер3 | цена/места/скидки | цена/места/скидки | цена/места/скидки

Номер4 | цена/места/скидки | цена/места/скидки | цена/места/скидки

   
 
 автор: oppo   (02.07.2008 в 18:37)   письмо автору
 
   для: oppo   (02.07.2008 в 17:26)
 

ДА еще
zaezdid из таблицы #__gintur_zaezdid соответствует ID #__gintur_pricing (заезды)

numerid из таблицы #__gintur_zaezdid соответствует ID #__gintur_numera

   
 
 автор: Trianon   (03.07.2008 в 21:13)   письмо автору
 
   для: oppo   (02.07.2008 в 17:26)
 

Дампы таблиц можете показать?

   
 
 автор: oppo   (03.07.2008 в 23:30)   письмо автору
 
   для: Trianon   (03.07.2008 в 21:13)
 

номера
CREATE TABLE `jos_gintur_numera` (
  `id` int(11) NOT NULL auto_increment, // связан с numerid
  `description` varchar(200) NOT NULL default '',
  `dop` mediumtext NOT NULL,
  `otel` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


заезды
CREATE TABLE `jos_gintur_pricing` (
  `id` int(10) NOT NULL auto_increment, // связан с zaezdid
  `accid` int(10) NOT NULL default '0',
  `title` varchar(150) NOT NULL default '',
  `description` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


и результирующая в которую вписываються цена\места \скидки соответственно

CREATE TABLE `jos_gintur_zaezdid` (
  `zaezdid` int(11) NOT NULL default '0',
  `numerid` int(11) NOT NULL default '0',
  `dopzaezd` int(11) NOT NULL default '0',
  `otel` int(11) NOT NULL default '0',
  `zena` varchar(150) NOT NULL default '',
  `mesta` varchar(254) NOT NULL default '',
  PRIMARY KEY  (`zaezdid`,`numerid`,`dopzaezd`),
  KEY `idx_gintur_zaezdid` (`numerid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;



я уже сделал (подсказали что в цикл надо ) но не очень нравиться
Получаем заезды
    $database->setQuery( "SELECT p.title AS ptitle,p.id AS pid "
    . "\n FROM #__gintur_pricing AS p"
    ."\n WHERE  p.published='1' AND p.accid ='".($row ->id)."' "
    ."\n ORDER BY p.id  "
    );

  $zaezd = $database->loadObjectList(); // лист обектов 


потом выбор название номеров и цена\места \скидки

 echo '<table width="95%" border="0" cellspacing="0" cellpadding="1" align="center" class="adminform">';
echo "<tr><th width=\"100\">#</th>\r\n"; 

    foreach ($zaezd as $price) {
            if ($price->pid && $price->ptitle) {
    echo "<th width=\"$col_width\">".$price->ptitle."</th>\r\n";

                $query = "SELECT z.zena,z.mesta,z.dopzaezd, n.description AS ntitle,n.id AS nid,s.title AS doptitle,s.prz "
                . "\n FROM #__gintur_zaezdid AS z "
                . "\n INNER JOIN  #__gintur_numera AS n ON n.id=z.numerid  "
                . "\n LEFT JOIN  #__gintur_shara AS s ON s.id=z.dopzaezd  "
                . "\n WHERE z.zaezdid = " . (int) $price->pid
                . "\n AND z.otel = " . (int) $row ->id
                . "\n ORDER BY n.id ";
и так далее

   
 
 автор: Trianon   (04.07.2008 в 00:08)   письмо автору
 
   для: oppo   (03.07.2008 в 23:30)
 

На самом деле можно обойтись вот таким одним запросом:
"SELECT * FROM {$prefix}zaezdid
  LEFT JOIN .... // джойны, нужные для получения отображаемых данных
ORDER BY numerid, zaezdid"


ORDER BY позволит получать данные в таком порядке, в котором можно сформировать ячейки таблицы, по строкам number за number ( а внутри строки по ячейкам заезд за заездом).
Цикл конечно понадобится, и над ним придется покорпеть. Но запросы в цикле не нужны.
Нужно будет всего два запроса - чтобы отрисовать шапку таблицы, и вот этот - чтобы отрисовать значения ячеек.

   
 
 автор: oppo   (04.07.2008 в 01:21)   письмо автору
 
   для: Trianon   (04.07.2008 в 00:08)
 

спасибо, Trianon - попробую
поздно счас - поэтому на утро, если можно уточните , что тут :
 LEFT JOIN .... // джойны, нужные для получения отображаемых данных

   
 
 автор: Trianon   (04.07.2008 в 01:26)   письмо автору
 
   для: oppo   (04.07.2008 в 01:21)
 

>поздно счас - поэтому на утро, если можно уточните , что тут :
> LEFT JOIN .... // джойны, нужные для получения отображаемых данных

Ваши же
. "\n INNER JOIN #__gintur_numera AS n ON n.id=z.numerid "
. "\n LEFT JOIN #__gintur_shara AS s ON s.id=z.dopzaezd "

Собственно, если таблицы небольшие, то можно и без них.
Опять же, отдельными запросами затянуть, как и заезды.

   
 
 автор: oppo   (12.07.2008 в 16:23)   письмо автору
 
   для: Trianon   (04.07.2008 в 01:26)
 

ПРИВЕТ было время переделал по-другому - может кому пригодиться (или же можно сделать проще .).
ОТЕЛЬНО СПАСИБО Trianon - за подсказку
----------------------------------------------------------------------
Обошлось 2 запросами к базе

 if ($numnomera && $numzaezd) {
 $col_width = round(1/($numzaezd+1) * 100,0)."%";
 $row = ceil($numnomera/$numzaezd);

 echo '<table class="gtr" border="1" width="100%">';
//..заголовок 
 echo '<tr><th width="'.$col_width.'">Номера</th>';
 for ($m=0, $n=$numzaezd; $m < $n; $m++) {
 echo '<th>'.$zaezd[$m]->ptitle.'</th>';
 }
 echo '</tr>';
 //..номера 
 $k = 0;    $class = '';
 for ($i = 0; $i < $row; $i++) {
     $class = $i%2;
  $class =' class="gtrrow'.$class.'"  ';
  echo '<tr '.$class. '>';
  for ($j = 0; $j < $numzaezd; $j++) {
   if (($k)%$numzaezd == 0) echo '<td width="'.$col_width.'"><b>'.$price[$k]->ntitle.'</b></td>';

   if (isset($price[$k]))
    echo '<td width="'.$col_width.'">'.$price[$k]->zena.''.$price[$k]->mesta.''.$price[$k]->zena.'</td>';
   else
    echo('<td width="'.$col_width.'">&nbsp;</td>');
   $k++;
  }
  echo('</tr>');
 }
 echo('</table>');
}

   
Rambler's Top100
вверх

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