За последние 24 часа нас посетили 22906 программистов и 1243 робота. Сейчас ищут 788 программистов ...

БД календарного типа

Тема в разделе "PHP и базы данных", создана пользователем amen, 17 окт 2012.

  1. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Сорри, если название темы получилось глупым.
    Вопрос в чем. Скажем, есть список объектов. Каждый день каждому объекту надо устанавливать "+" или "-", и иметь возможность выводить таблицу-отчет за определённый период (с такого-то по такое число). Как организовать подобную БД? Я так понимаю, создавать по столбцу для каждого дня - не вариант...
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Если б не отчет, то просто одно поле у объекта.

    А теперь тебе придется сделать две таблицы: объекты и подням. В поднях каждая строка это номер объекта, дата и tinyint изменение рейтинга.
     
  3. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    igordata, спасибо! Вот что значит лениться думать, ерунда ведь совсем))
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    я думаю, ты надеялся на какое-то более хитрое решение, чем копить все плюсики и минусики. Однако его нет, если хочешь видеть историю.
     
  5. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Маленький вопрос. Новую тему уж не стал заводить.
    Как в INSERT запросе автоматически прибавлять к значению поля числового типа единицу, например?
    Вариант

    Код (Text):
    1. mysql_query("INSERT INTO `data` ( `objid`, `date`, `pl_min`, `rait` )
    2.                             VALUES(". $object . ',' .  
    3.                                       $date . ',' .
    4.                                       $plus . ", rait+1)");
    Не принимает...
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Если "прибавлять", то видимо нужная запись уже есть, значит не INSERT, а UPDATE. Учи SQL.

    Добавлено спустя 3 минуты 29 секунд:
    Что-то вроде
    Код (PHP):
    1. mysql_query("UPDATE `data` SET `rait`=`rait`+1, `date`={$date}");
    2.  
    здесь поле date это дата последнего изменения рейтинга. я так понял )))

    Добавлено спустя 2 минуты 23 секунды:
    rait - о май гад! вот э факинг инглиш.
     
  7. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Да, да, я говнокодю, признаю. Вспоминаю все то немногое, что когда-то знал)))
    Помогите разобраться с кавычками, плиз!

    Код (Text):
    1.         $res = mysql_query("INSERT INTO `data` (objid, date, pl_min)
    2.                             VALUES('". $object,    
    3.                                        $date,
    4.                                        1 ."'");
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    нетбинс поставь
     
  9. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    С кавычками разобрался.
    Сейчас одна проблема: дата записывается везде как 0000-00-00

    Код (Text):
    1. $date = $_POST['date'];
    2.         $date1 = $date[6].$date[7].$date[8].$date[9].'-'.$date[0].$date[1].'-'.$date[3].$date[4];
    3.  
    4. mysql_query("INSERT INTO `data` (objid, date)
    5.                             VALUES(". $obj_id .",  
    6.                                    ". $date1 . ")");
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ну посмотри что приходит, как выглядит запрос перед отправкой в бд...
     
  11. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Как посмотреть? В переменную дата записывается в правильном формате - гггг-мм-дд. Запрос выполняется...
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    mysql_query("INSERT INTO `data` (objid, date)
    VALUES(". $obj_id .",
    ". $date1 . ")");

    замени на
    $query = "INSERT INTO `data` (objid, date)
    VALUES(". $obj_id .",
    ". $date1 . ")";
    echo "ЗАПРОС: $query КОНЧИЛСЯ";
    mysql_query($query);
     
  13. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    INSERT INTO `data` (objid, date) VALUES(1, 2012-10-02)

    как я и говорил, вроде все нормально

    Добавлено спустя 11 минут 52 секунды:
    Дело было в кавычках:

    Код (Text):
    1.         $res = "INSERT INTO `data` (objid, date)
    2.                             VALUES(". $obj_id .",  
    3.                                    "."'". $date1 . "'".")";
    Добавлено спустя 30 секунд:
    Смотрится страшно, но работает)
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    нормально смотрится. названия полей тоже в обратные кавычки бери.

    Код (PHP):
    1. $res = "INSERT INTO `data` (`objid`, `date`) VALUES ($obj_id ,'$date1')"; 
     
  15. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    igordata, благодарю!

    Столкнулся с проблемой вывода отчета...
    Значит 2 таблицы

    Код (Text):
    1. `data`(
    2.                                 `id` int NOT NULL AUTO_INCREMENT KEY,
    3.                                 `objid` int NOT NULL,
    4.                                 `date` date,
    5.                                 `pl_min` TINYINT(1)
    6.  
    7. `objects`
    8.                                 `id` int NOT NULL AUTO_INCREMENT KEY,
    9.                                 `name` varchar(50),
    10.                                 `orgname` varchar(50),
    11.                                 `orient` varchar(150),
    12.                                 `rating` int
    Надо вывести список всех объектов и расставить плюсы и минусы за каждый день определённого периода времени. То есть один объект на одну строку и одна дата на один столбец.
    Запрос в цикле это вроде как не гуд, так что пошёл смотреть как делают запросы сразу в тве таблицы. Что получилось:

    Код (Text):
    1. SELECT objects.id, objects.name, objects.orgname, objects.orient, objects.rating, data.objid, data.date, data.pl_min
    2.           FROM `objects`, `data`
    3.           WHERE objects.id = data.objid
    4.           ORDER BY objects.rating DESC
    получилось не очень - объекты в списке дублируются...
    Да и не совсем понимаю, как приплести в таблицу поля для дат...
    Дайте направление, плиз