За последние 24 часа нас посетили 18295 программистов и 1637 роботов. Сейчас ищут 1611 программистов ...

вывести данные из бд в виде одной таблицы

Тема в разделе "PHP для новичков", создана пользователем Vovik, 5 фев 2013.

  1. Vovik

    Vovik Активный пользователь

    С нами с:
    28 янв 2013
    Сообщения:
    9
    Симпатии:
    0
    есть таблица в бд, типа календаря, где есть число и месяц
    как вывести в одну таблицу месяц, и числа, в зависимости сколько их там, то есть

    как то так
    http://i080.radikal.ru/1302/8f/f6d596438744.jpg

    слева наша таблица в бд, а справа можно реализовать такой вывод из БД? или даже месяц лучше вывести из пределы таблицы, сверху, а таблица из 2 строчек и столбцов в зависимости сколько в базе есть, то есть дней в текущем месяце
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    прошу прощения, но что вы храните в календаре?
    вывести календарь легко и просто - время оно и в Африке время. другое дело вывести в календаре события из БД. но это тоже не такая сложная задача - в таблице всего три поля должно быть (идентификатор, дата, описание). можно еще добавить, но минимум такой будет.
     
  3. Vovik

    Vovik Активный пользователь

    С нами с:
    28 янв 2013
    Сообщения:
    9
    Симпатии:
    0
    вот то что "другое дело" - хранить события на каждой дате и вывести в календарный месяц одной строчкой с 1 числа по.....какое там в месяце
    или подскажите как и чего начать делать
    http://s020.radikal.ru/i716/1302/9e/f41cd283b348.jpg


    или есть какой то скрипт
     
  4. Tokha

    Tokha Активный пользователь

    С нами с:
    29 янв 2013
    Сообщения:
    77
    Симпатии:
    0
    Шашечки или ехать?

    Зачем забивать в базу календарь? Его можно выводить простым циклом получая количество дней в конкретном месяце конкретного года вызовом cal_days_in_month. Задача: хранить события в базе, с указанием даты, к которой "привязано" событие. Об этом говорит Ganzal. При построении календаря Вам известен год, месяц и текущий день. В каждой итерации цикла смотрите, есть ли в базе событие для этого дня и в этой ячейке пишете соответствующие пометки или ничего не пишете.
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    храните в таблице ММ-ЧЧ (ну или ГГГГ-ММ-ЧЧ). весь запрос к базе будет сведен к выбору всех строк, у которых месяц соответствует переданному
    например WHERE MONTH( `поле_даты_события` ) = MONTH( NOW( ) ) покажет все строки у которых месяц соответствует месяц текущего времени сервера.

    выбрали из базы, поместили в массив с ключами, соответствующими числам.

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

    Добавлено спустя 1 минуту 47 секунд:
    осторожнее с выражениями))) новички они такие... будут делать 28-31 запрос к базе))))
     
  6. Vovik

    Vovik Активный пользователь

    С нами с:
    28 янв 2013
    Сообщения:
    9
    Симпатии:
    0
    есть форма и 2 поля, где заносим день и статус на день (работает или нет, или коммандировка), по клику всё заносит ок (только не сделал ещё от повторного добавления этого же дня и месяца). вот.
    id|data|mouth |status
    1 |01 |February|P
    2 |02 |February|P
    3 |03 |February|P
    4 |04 |February|O


    и так далее
    и вывести в линию в 2 строчки, и столбцов количество равное количеству дат
    уже проблемка в выводе стоит(((
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а какая проблемка-то стоит? я алгоритм описал. словами. план действий есть. теперь этот алгоритм несколькими строками реализуется на языке программирования пхп и получаем рабочий сценарий. работа выполнена, идем пить пиво.
    я отсюда не вижу какие проблемки это раз и два я не вижу ваших наработок чтоб понять какая проблемка. так что пока проблемкой буду лень считать.

    Добавлено спустя 11 минут 53 секунды:
    оффтоп
    если вы реализуете систему учета рабочего времени то рекомендую на битмапы сразу переходить.
    к примеру битмап abcd - где a - признак "работал", b - болел, c - командировка, d - был в офисе.
    1001 (9) - работал в офисе - +к зарплате
    0000 (0) - не был на работе, выходной.
    0100 (4) - не работал, но болел - +к зарплате по больничному листу
    1010 (10) - был в командировке - +к зарплате
    0001 (1) - не работал, но был в офисе и пил кофе - вычтем из зарплаты ложку кофе и кусочек сахара.
    работать с ними просто:
    & 1 = 1 - все кто был в офисе
    & 9 = 9 - все кто был в офисе и работал
    & 8 - кому работал
    и тд...
    статусов значительно больше (см бухгалтерский учет) и битмапы немного иначе надо будет формировать, но система будет более гибкой.
     
  8. Tokha

    Tokha Активный пользователь

    С нами с:
    29 янв 2013
    Сообщения:
    77
    Симпатии:
    0
    Да, подумал о том же, когда написал, но понадеялся на интуицию пытливого ума. Вижу, что напрасно.

    Наверное, все же, не битмапы, а битовые поля? А-то сейчас начнет GD2 для проверки работников штудировать. :)
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    http://ru.wikipedia.org/wiki/Bitmapбит - бит, мап - карта. битовая карта. битовые поля это там где биты растут и вырастают в байтовые рощи))) но, согласен, в голове новичка это ближе к GD2 )))
     
  10. Vovik

    Vovik Активный пользователь

    С нами с:
    28 янв 2013
    Сообщения:
    9
    Симпатии:
    0
    это всё конечно здорово и битмапы, но мне так не надо заморачиваться, просто 3 статуса, которые буду писаться в бд и вовыдиться в виде календаря сеткой на месяц, который берёт из date месяца
    поэтому как бы и хочу узнать как вывести в таком виде, в 2 строки , всё в одной таблице. а то выводится, и на каждую строчку в таблице своя таблица в php поулчается/ Мне не надо полный табель учёта рабочего времени, а просто заносить в базу по дням, и выводить на главной для user ов
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    как выводите-то? я-то знаю правильный алгоритм, но я не сдам его вам без контрольной проверки знаний - вам же нужно понять, что вы сделали не так и как делать надо.
     
  12. Vovik

    Vovik Активный пользователь

    С нами с:
    28 янв 2013
    Сообщения:
    9
    Симпатии:
    0
    Код (Text):
    1. while ($row = mysql_fetch_assoc($result))
    2.  {
    3.      $table .="<table border='1' cellspacing='1' cellpadding='1'>";
    4.      $table .= "<tr>";
    5.      $table .= "<td>".$row['data']."</td>";
    6.      $table .= "</tr>";
    7.      $table .= "<tr>";
    8.      $table .= "<td>".$row['status']."</td>";
    9.      $table .= "</tr>";
    10.      $table .= "</table>"; }
    11.  
    12.  echo $table;
    получается что каждая строка в своей таблице, наверно надо как то через условие сделать, и вывод идёт в столбец (((
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    БРРРРРРРРР.

    Код (PHP):
    1. $table='';
    2. while($row=mysql_fetch_assoc($result)) {
    3.      $table.='<table border="1" cellspacing="1" cellpadding="1">
    4.                 <tr>
    5.                     <td>
    6.                         '.$row['data'].'
    7.                     </td>
    8.                 </tr>
    9.                 <tr>
    10.                     <td>
    11.                         '.$row['status'].'
    12.                     </td>
    13.                 </tr>
    14.             </table>';
    15. }
    16. echo $table;
     
  14. Vovik

    Vovik Активный пользователь

    С нами с:
    28 янв 2013
    Сообщения:
    9
    Симпатии:
    0
    да я знаю что это старый век
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    сразу ошибка и нашлась - вы выводите по таблице на каждую итерацию.
    итераций должно быть две, как я уже говорил
    действия такие.
    0. выбрали данные из таблицы.
    1. узнали длину месяца.
    2. бросили в поток начало таблицы и начало строки.
    3. для всех чисел от 1 до длины месяца - печатаем по ячейке с выводом текущего значения итерации чисел месяца.
    4. бросили в поток закрытие строки и открытие строки
    5. для всех чисел от 1 до длины месяца - печатаем по ячейке с выводом подходящих данных для текущего "числи" из ранее выбранных из базы.
    6. бросаем в поток закрытие строки и закрытие таблицы.

    готово.

    судя по вашему скрипту - вы сначала в строку все собираете, а потом кидаете в поток. ну не люблю я такой метод, но у него есть один плюс - одна итерация (вместо двух, о которых я говорил)
    0. выбрали данные из таблицы.
    1. узнали длину месяца.
    2. для всех чисел от нуля до длины месяца
    2.1 записываем в память №1 ячейку с текущим значением итерации чисел месяца
    2.2 записываем в память №2 ячейку с подходящими данными для текущего "числи" из ранее выбранных из базы.
    3. бросили в поток открытие_таблицы + открытие_строки + память1 + закрытие_строки + открытие_строки + память 2 + закрытие_строки + акрытие_таблицы.

    готово.
     
  16. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Неа, это у вас с логикой проблема ;)