Как вывести данные из бд в 4 столбца в моем случае?

Quexx

Новичок
Как вывести данные из бд в 4 столбца в моем случае?

Не получается вывесли данные в таблицу..в 4 столбца. Данные в БД в таком виде:

Имя / Время / действие
Маша / 7:00 / подъем /
Маша / 7:30 / звтрак /
Люда / 8:00 / вязание /
Люда / 9:00 / поливка /
Петя / 8:00 / подъем /
Петя / 12:00 / обед /
Петя / 14:00 / прогулка /

Не могу вывести в таблицу чтобы выглядело так:

Маша / Людя / Петя
7:00 подъем / 8:00 вязание /8:00 подъем
и тд.

Делаю в foreach, но получается вывести только в один столбец сначала про одного человека потом про другого и тд.

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

Quexx

Новичок
Автор оригинала: Krishna
Это что - 4 столбца? По-нормальному алгоритм проясни.
Я описал примерно...если мне нужно было бы вести 25 столбцов...мне что их тоже рисовать?

Значит...пример не удачно привел чтоли..? Вот к примеру программу телепередач представим. Данные передач в БД находятся в таком виде:

id | chanel | times | programma
1 1 11:00 Кино
2 1 12:00 Мульт
3 1 13:00 Кино
4 2 13:00 ВВС
5 2 13:00 Кино
6 2 13:00 мульт1
7 3 13:00 мульт2
8 3 13:00 мульт3
9 7 13:00 мульт4

Из такой базы нужно получить данные в таблицу в 4 столбца:

Первый канал (1) | Второй канал (2) | Третий канал (3) | Седьмой канал (7)
11:00 Кино | 13:00 ВВС | 13:00 Мульт1 | 13:00 Мульт4
.... .... ..... ......

Так например каналов 25 и программ очень много. Вот и не знаю сам как алгоритм должен выглядить.


Поиск знаю....и прежде чем задать вопрос...эту тему читал там совсем не то. Если бы в Тв программе у каждого канала было по одному кинчику, я бы и не заморачивался.
 

CCCP_MOCKBA

Новичок
Не совсем ясна проблема, ты не можешь HTML таблицу построить, или прочесть данные из БД в массив?
 

_vampiro_

Новичок
я, кажись, примерно понял чего он может хотеть

Код:
    [ Masha ] [ Ivan]    [Katia]
    [ 8:00]   [ 8:00]    [ 8:00]  
    [ 9:00]   [     ]    [ 9:00]
    [10:00]   [     ]    [     ]
так чтоль?
 

Quexx

Новичок
Автор оригинала: _vampiro_
я, кажись, примерно понял чего он может хотеть

Код:
    [ Masha ] [ Ivan]    [Katia]
    [ 8:00]   [ 8:00]    [ 8:00]  
    [ 9:00]   [     ]    [ 9:00]
    [10:00]   [     ]    [     ]
так чтоль?
Да вроде того...только:

Код:
    [ Masha ]             [ Ivan]                        [Katia]
    [ 8:00 вязание]   [ 8:00 вышивание]    [ 8:00 подьем]  
    [ 9:00]                 [     ]                           [ 9:00]
    [10:00]                [     ]                           [     ]
То есть нужно выводить время действий того или иного человека в таблицу в 4 столбца.

-~{}~ 20.06.06 16:35:

Автор оригинала: CCCP_MOCKBA
Не совсем ясна проблема, ты не можешь HTML таблицу построить, или прочесть данные из БД в массив?
Да данные я прочитал...пока додумался до этого:
PHP:
echo "<table border=\"0\" cellspacing=\"2\" class=\"nshow\">\n";
foreach($names as $name)
{
if($name->numname != $qx)
     {
     echo "<tr>\n";
     echo "\t<td colspan=\"2\" class=\"headl\">\n";
     echo "<span class=\"sagolovok\">$name->fullname</span>\n";
     echo "\t</td>\n";
     echo "</tr>\n";
     }

     echo "<tr>\n";
     echo "\t<td class=\"timeformat\">$name->hour</td>\n";
     echo "\t<td class=\"iname\">$name->act_im";
     echo "\t</td>\n";
     echo "</tr>\n";

$qx=$name->numname;

}
    echo "</table>\n";
То есть не могу понять как построить HTML таблицу..
 

CCCP_MOCKBA

Новичок
читать из БД в массив затем в цикле выводить
HTML:
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>Маша</td>
    <td>Паша</td>
    <td>Валя</td>
    <td>Галя</td>
  </tr>
  <tr>
    <td>8:00</td>
    <td>9:00</td>
    <td>8:30</td>
    <td>7:30</td>
  </tr>
</table>
 

_vampiro_

Новичок
имхо:
1. select distinct Имя order by Имя- кол-во колонок.
2. select * from ... order by время, Имя - вырываем экшаны
3 рисуем.
цикл - по Именам (по результатам выборки №1)
смотрим буфер записи. Если там пусто -
фетчим строку. Если имя в записи==имя в цикле - рисуем экшан, чистим буфер. иначе - рисуем <td>&nbsp;</td>, запоминаем в буфер.

в начале и конце цикла по именам - <tr> и </tr>

Это "построчная" реализация. Есть еще как минимум 2 варианта - класть всё в двумерный массив, или прорисовать таблицу (шапка и 1 строка) и потом в каждом столбце отдельно прописывать экшаны через <br>
 

Quexx

Новичок
Автор оригинала: _vampiro_
имхо:
1. select distinct Имя order by Имя- кол-во колонок.
2. select * from ... order by время, Имя - вырываем экшаны
3 рисуем.
Понял только эти 3 строки,( если возможно, то покажите в примерном коде..
Моя вина...что не напомнил...но в самом начале писал.., что имен может быть 4, а может быть и гораздо больше...то есть если имен 5, то нужно перейти на следующую строку, если имен 12 то должна получится таблица из 3 строк и 4 столбцов. Ваш пример..это сможет сделать?
 

_vampiro_

Новичок
Quexx

Ваша вина в том, что вы не можете решить (для себя) что вам надо. :) Если это можно назвать виной... а не горем.


Уточняю.
Пусть имен -12. колонок - 4. (строк - 3) и Маша что-то делает в 8:00, 10:00 и 12:00. куда будут вписываться экшаны? в какие ячейки таблицы?
Для простоты - "Маша" первая в списке имен.
 

Quexx

Новичок
Автор оригинала: _vampiro_
Ваша вина в том, что вы не можете решить (для себя) что вам надо. :) Если это можно назвать виной... а не горем.
Да решить..то решил..Объяснить действительно трудно...не ругайтесь..я со временем исправлюсь..)) Вот хтмл..который я хочу получить.. (на 8 имен, чтобы не было длинно):
Код:
<table>
  <tr>
    <td colspan="2">Маша</td>
    <td colspan="2">Федя</td>
    <td colspan="2">Вася</td>
    <td colspan="2">Кондрат</td>
  </tr>
  <tr>
    <td>8:00</td>
    <td>Подъем</td>
    <td>8:00</td>
    <td>Подъем</td>
    <td>8:00</td>
    <td>Подъем</td>
    <td>8:00</td>
    <td>Подъем</td>
  </tr>
  <tr>
    <td>8:00</td>
    <td>Пробежка</td>
    <td>8:00</td>
    <td>Пробежка</td>
    <td>8:00</td>
    <td>Пробежка</td>
    <td>8:00</td>
    <td>Пробежка</td>
  </tr>
   <tr>
    <td colspan="2">Сеня</td>
    <td colspan="2">Люда</td>
    <td colspan="2">Коля</td>
    <td colspan="2">Фекла</td>
  </tr>
  <tr>
    <td>8:00</td>
    <td>Подъем</td>
    <td>8:00</td>
    <td>Подъем</td>
    <td>8:00</td>
    <td>Подъем</td>
    <td>8:00</td>
    <td>Подъем</td>
  </tr>
</table>
Еще раз извеняюсь ели ввел в заблуждение((
 

_vampiro_

Новичок
хитрый случай... :)
<br /> не подойдет?
Код:
<table>
  <tr>
    <td>Маша</td>
    <td>Федя</td>
    <td>Вася</td>
    <td>Кондрат</td>
  </tr>
  <tr>
    <td><nobr>8:00 Подъем</nobr> <br>
        <nobr>8:00 Пробежка</nobr></td>
    <td><nobr>8:00 Подъем</nobr> <br>
        <nobr>8:00 Пробежка</nobr></td>
    <td><nobr>8:00 Подъем</nobr> <br>
        <nobr>8:00 Пробежка</nobr></td>
    <td><nobr>8:00 Подъем</nobr> <br>
        <nobr>8:00 Пробежка</nobr></td>                
  </tr>
</table>
 

Quexx

Новичок
Автор оригинала: _vampiro_
хитрый случай... :)
<br /> не подойдет?
Если нет другого способа, то подойдет и <br />, И думаю еще бы подошло если сначала складывать все про каждое имя в отдельную таблицу, а потом эти таблицы складывать в еще одну таблицу в которой как раз 4 столбца. Что-то вроде:
Код:
<table>
  <tr>
    <td><table>
        <tr>
          <td colspan="2">Маша</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Подъем</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Пробежка</td>
        </tr>
      </table></td>
    <td><table>
        <tr>
          <td colspan="2">Фома</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Подъем</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Пробежка</td>
        </tr>
      </table></td>
    <td><table>
        <tr>
          <td colspan="2">Костя</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Подъем</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Пробежка</td>
        </tr>
      </table></td>
    <td><table>
        <tr>
          <td colspan="2">Гриша</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Подъем</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Пробежка</td>
        </tr>
      </table></td>
  </tr>
</table>
Если и так не возможно...то тогда согласен на <br />.
 

_vampiro_

Новичок
тогда предлагаю такой вариант: сделать функцию, которая будет рисовать таблицу в зависимости от имяни.

Код:
<table>
        <tr>
          <td colspan="2">Гриша</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Подъем</td>
        </tr>
        <tr>
          <td>8:00</td>
          <td>Пробежка</td>
        </tr>
      </table>
это просто. Пусть эта функция называется GetActions($name);

теперь, чтобы нам разрисовать все как надо - делаем такой финт ушами.

тут наша функция.
тут текущая колонка=1
1. select Distinct имена.
2 while $row=строка {
если "текущая колонка==1", то рисуем <tr>
рисуем <td>
вызываем нашу функцию.
рисуем </td>
колонка++
если колонка больше 4, то колонка=1 и рисуем </tr>

будет много запросов, зато чуть более понятно.

}
 

Quexx

Новичок
Есл взможно..,то приведите кусок кода..как это будет выглядеть...а то так трудно мне понять..И например...что будет происходить в функции? Если можно, то кодом.
 
Сверху