Всем привет! Необходимо добавить в выборку из одной таблицы ограничение по датам. Мол вывести значения начиная с "12 ноября 2014 по 12 декабря 2014". Вот как в вот этот запрос: Код (PHP): $sql = mysql_query("SELECT * FROM `baza_orderov` WHERE `order_id` >= $limit ORDER BY `order_id` $sort_by", $link); while ($result = mysql_fetch_array($sql)) { /*тут выводим полученные результаты*/ } добавить возможность выборки по датам чтоб получилось так: Код (Text): <form name="dataorderov"> Начало <select name="start_date"> <option selected value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> <option value="06">06</option> <option value="07">07</option> <option value="08">08</option> <option value="09">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="start_month" size="1"> <option value="01">Январь</option> <option value="02">Февраль</option> <option value="03">Март</option> <option value="04">Апрель</option> <option value="05">Май</option> <option value="06">Июнь</option> <option value="07">Июль</option> <option value="08">Август</option> <option value="09">Сентябрь</option> <option value="10">Октябрь</option> <option value="11">Ноябрь</option> <option value="12">Декабрь</option> </select> <select name="start_year" size="1"> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014" selected>2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select> Конец <select name="end_date"> <option selected value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> <option value="06">06</option> <option value="07">07</option> <option value="08">08</option> <option value="09">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="end_month" size="1"> <option value="01">Январь</option> <option value="02">Февраль</option> <option value="03">Март</option> <option value="04">Апрель</option> <option value="05">Май</option> <option value="06">Июнь</option> <option value="07">Июль</option> <option value="08">Август</option> <option value="09">Сентябрь</option> <option value="10">Октябрь</option> <option value="11">Ноябрь</option> <option value="12">Декабрь</option> </select> <select name="end_year" size="1"> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014" selected>2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select> </form> Таблица "timestamp" содержит даты в секундах "1362978411"
для даты и времени есть свои типы create table можно сделать выполнив запрос show create table во вкладке sql или сделать экспорт "на экран"+ "только структура" на вкладке экспорта. кстати пма у вас вроде сильно устаревшая.
Код (Text): CREATE TABLE `baza_orderov` ( `order_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `is_parent_order` char(1) NOT NULL DEFAULT 'N', `parent_order_id` mediumint(8) unsigned NOT NULL DEFAULT '0', `company_id` int(11) unsigned NOT NULL DEFAULT '0', `user_id` mediumint(8) unsigned NOT NULL DEFAULT '0', `total` decimal(12,2) NOT NULL DEFAULT '0.00', `subtotal` decimal(12,2) NOT NULL DEFAULT '0.00', `discount` decimal(12,2) NOT NULL DEFAULT '0.00', `subtotal_discount` decimal(12,2) NOT NULL DEFAULT '0.00', `payment_surcharge` decimal(12,2) NOT NULL DEFAULT '0.00', `shipping_ids` varchar(255) NOT NULL DEFAULT '', `shipping_cost` decimal(12,2) NOT NULL DEFAULT '0.00', `shipment_date` date DEFAULT NULL, `timestamp` int(11) unsigned NOT NULL DEFAULT '0', `status` char(1) NOT NULL DEFAULT 'O', `notes` text NOT NULL, `details` text NOT NULL, `promotions` text NOT NULL, `promotion_ids` varchar(255) NOT NULL DEFAULT '', `title` varchar(32) NOT NULL DEFAULT '', `firstname` varchar(32) NOT NULL DEFAULT '', `lastname` varchar(32) NOT NULL DEFAULT '', `company` varchar(255) NOT NULL DEFAULT '', `b_title` varchar(32) NOT NULL DEFAULT '', `b_firstname` varchar(128) NOT NULL DEFAULT '', `b_lastname` varchar(128) NOT NULL DEFAULT '', `b_address` varchar(255) NOT NULL DEFAULT '', `b_address_2` varchar(255) NOT NULL DEFAULT '', `b_city` varchar(64) NOT NULL DEFAULT '', `b_county` varchar(32) NOT NULL DEFAULT '', `b_state` varchar(32) NOT NULL DEFAULT '', `b_country` char(2) NOT NULL DEFAULT '', `b_zipcode` varchar(32) NOT NULL DEFAULT '', `b_phone` varchar(32) NOT NULL DEFAULT '', `s_title` varchar(32) NOT NULL DEFAULT '', `s_firstname` varchar(128) NOT NULL DEFAULT '', `s_lastname` varchar(128) NOT NULL DEFAULT '', `s_address` varchar(255) NOT NULL DEFAULT '', `s_address_2` varchar(255) NOT NULL DEFAULT '', `s_city` varchar(64) NOT NULL DEFAULT '', `s_county` varchar(32) NOT NULL DEFAULT '', `s_state` varchar(32) NOT NULL DEFAULT '', `s_country` char(2) NOT NULL DEFAULT '', `s_zipcode` varchar(32) NOT NULL DEFAULT '', `s_phone` varchar(32) NOT NULL DEFAULT '', `s_address_type` varchar(32) NOT NULL DEFAULT '', `phone` varchar(32) NOT NULL DEFAULT '', `fax` varchar(32) NOT NULL DEFAULT '', `url` varchar(32) NOT NULL DEFAULT '', `email` varchar(128) NOT NULL DEFAULT '', `payment_id` mediumint(8) NOT NULL DEFAULT '0', `tax_exempt` char(1) NOT NULL DEFAULT 'N', `lang_code` char(2) NOT NULL DEFAULT 'EN', `ip_address` varchar(15) NOT NULL DEFAULT '', `repaid` int(11) NOT NULL DEFAULT '0', `validation_code` varchar(20) NOT NULL DEFAULT '', `localization_id` mediumint(8) NOT NULL, `is_return` tinyint(4) NOT NULL DEFAULT '0', `driver_name` varchar(128) DEFAULT '', `driver_phone` varchar(128) DEFAULT '', `lift_to_floor` decimal(12,2) NOT NULL DEFAULT '0.00', `s_manager` varchar(50) NOT NULL, `username` varchar(255) NOT NULL, PRIMARY KEY (`order_id`), KEY `timestamp` (`timestamp`), KEY `user_id` (`user_id`), KEY `promotion_ids` (`promotion_ids`), KEY `status` (`status`), KEY `shipping_ids` (`shipping_ids`), KEY `is_return` (`is_return`)) ENGINE=MyISAM AUTO_INCREMENT=10144 DEFAULT CHARSET=utf8 а дату получаю вот так: Код (PHP): $data_zakaza = date("d.m.Y H:i:s",$result['timestamp']);
ну тут либо значения фильтра приводить в такие же таймстампы и делать сравнение чисел в диапазоне, либо приводить дату к правильному типу и тогда можно будет явно указывать типа 2011-02-06 - 2014-12-04. вам как удобнее? постоянно туда-сюда дату гонять через таймстамп или хранить данные в подходящем стиле? да, дата не 4 байта как инт(11) а 8 будет занимать, но с ней ведь работать удобнее. и она не зависит от юникс эпохи. и часовые пояса мускул корректно понимает. и она человекочитаема в отличии от таймстампа.
Нужно перегонять... Там очень много на этом завязано... Вплоть до выгрузки в 1С... по этому трогать лучше не буду и оставлю всё как есть и лучше дату скриптом перегнать в нужный скрипту формат, как я и делал. Можешь помочь добавить выборку по диапазону даты в этот код?
skorpion, понятно. смутило имя, т.к. в MySQL есть тип TIMESTAMP. "правильные" типы для даты в майсиквеле это DATE, DATETIME и TIMESTAMP. ну ок, если поле целочисленное, значит фильтр ты можешь задавать как-то так: Код (PHP): mysql_query("SELECT блаблабла FROM `baza_orderov` AS bo WHERE bo.`timestamp` BETWEEN {$d1} AND {$d2}"); здесь $d1 и $d2 содержат целые числа. например такие: Код (PHP): $d1 = strtotime('yesterday'); $d2 = strtotime('today') - 1; // т.к. условие between включающее… я тебя понял, но правильнее будет сказать, что $data_zakaza это не дата, а строка, в русском формате даты-времени. дата (таймстамп) в PHP имеет тип int, а не string. (а еще есть класс DateTime)вот глянь, надеюсь найдешь полезное для себя: viewtopic.php?f=20&t=50838&p=404504#p404369Добавлено спустя 10 минут 3 секунды:Терпеть не могу подобное `baza_orderov` ! А почему поле не `otpechatok_vremeni`, что за мешанина?! Один-эсовщина, будь она неладна!
Дополнительный вопрос: Подскажите пожалуйста, как получить общую сумму из выведенных результатов таблицы $result['total']... Код (PHP): $sql = mysql_query("SELECT * FROM `baza_orderov` AS bo WHERE bo.`timestamp` BETWEEN {$d3} AND {$d4} ORDER BY `order_id` $sort_by", $link); while ($result = mysql_fetch_array($sql)) { $summa = $result['total']; ........ } Например вывелось 25 строк с разными цифрами: 7 45 96 11 23 а как вывести результат общей суммы этих 25 строк?
объявить перед запросом некоторую переменную дав ей нулевое значение итерируя результат запроса прибавлять к этой переменной значение нужного поля
Вылетает ошибка Fatal error: Call to undefined function fetch() in и я не понял в какое место это подставить?
а это метаязык. знаком с таким? можно программу на русском описать, можно на английском, можно на метаязыке. в данном случае я использовал мету для ускорения написания ответа. ты уже сам должен додумать что из этого должно быть заменено и на какие конструкции языка пхп.
к сожалению я не программист.... я психолог. я попросил помощи, показать как это сделать. Додумать не получится по причине отсутствия необходимых знаний....
понятно... вот тебе мод твоего кода. Код (PHP): $total_summa=0; // объявили нулевую итоговую сумму. $sql = mysql_query("SELECT * FROM `baza_orderov` AS bo WHERE bo.`timestamp` BETWEEN {$d3} AND {$d4} ORDER BY `order_id` $sort_by", $link); while ($result = mysql_fetch_array($sql)) { $total_summa += $result['total']; // прибавили тотал к сумме тоталов. $summa = $result['total']; две строки добавлено, ноль изменено.