PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (13): « 1 [2] 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 190
lawer85 Отправлено: 06 Января, 2016 - 18:00:33 • Тема: Выборка из бд по дате • Форум: Работа с СУБД

Ответов: 13
Просмотров: 1721
Спасибо. Просто раз уж разговор зашел, то надо разобраться. Мне хочется не просто знать что-то, а еще и разбираться в этом хорошо.
lawer85 Отправлено: 06 Января, 2016 - 17:40:16 • Тема: Выборка из бд по дате • Форум: Работа с СУБД

Ответов: 13
Просмотров: 1721
Я тему индексов плохо знаю. Вообще в чем прикол этих индексов. MySQL делает запрос и выборку, делает соответствующие записи в отдельную таблицу так и затем уже перебирает по ней, а не по всей бд я правильно понимаю?
(Добавление)
Да и для чего указывать interval 1 day ?
lawer85 Отправлено: 06 Января, 2016 - 17:30:01 • Тема: Выборка из бд по дате • Форум: Работа с СУБД

Ответов: 13
Просмотров: 1721
Я имел ввиду если писать так

SELECT id FROM activities WHERE DATE_FORMAT(created_at, '%Y-%m-%d')='2016-01-03'
lawer85 Отправлено: 06 Января, 2016 - 17:13:23 • Тема: Выборка из бд по дате • Форум: Работа с СУБД

Ответов: 13
Просмотров: 1721
Я понимаю почему мой вариант не работал. Я предполагал, что надо указать что это только часть от полной даты что записано в поле created_at.

Однако не понял почему MySQL может не так понять мой запрос. Ведь я явно указываю что дата такая-то.
lawer85 Отправлено: 06 Января, 2016 - 17:02:43 • Тема: Выборка из бд по дате • Форум: Работа с СУБД

Ответов: 13
Просмотров: 1721
Спасибо
lawer85 Отправлено: 06 Января, 2016 - 16:29:17 • Тема: Выборка из бд по дате • Форум: Работа с СУБД

Ответов: 13
Просмотров: 1721
Есть таблица с полем timestamp. Туда записывается дата + время типа так 2016-01-03 20:16:29

Как мне вытащить все записи одной даты конкретной даты?

Запрос такого вида не проходит

CODE (SQL):
скопировать код в буфер обмена
  1. "SELECT id FROM activities WHERE created_at='2016-01-03'"
lawer85 Отправлено: 04 Января, 2016 - 22:51:00 • Тема: Не работает обновление информации в базе данных • Форум: Вопросы новичков

Ответов: 14
Просмотров: 436
Я имел ввиду перенаправление header("Location: file.php");
lawer85 Отправлено: 04 Января, 2016 - 22:01:12 • Тема: Не работает обновление информации в базе данных • Форум: Вопросы новичков

Ответов: 14
Просмотров: 436
Trosel пишет:
Теперь другая проблема, кнопка то работает, но при обновлении страницы почему то постоянно плюсуется, таким образом чтобы увеличивать $y я могу просто обновлять страницу, как это убрать? Заранее спасибо.
(Добавление)
При чём я заметил, что это получается только после первого нажатия, т.е. если я зашёл на стринцу и не жал ещё на кнопку, то при обновлении значение не меняется


Это происходит из-за того, что при обновлении данные из сабмита снова отправляются на сервер. Хорошей практикой является перенаправление на туже страницу после отправки данных
lawer85 Отправлено: 03 Января, 2016 - 22:24:16 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 426
Prizma пишет:
lawer85 пишет:
Вы не поняли. Скрипт не работает 24 часа в сутки. Скрипт заполняет БД разными действиями сотрудников и этих действий от 10 до 600 и каждое выполняется от 5 минут до 5 часов. Из скрипта видно что кол-во действий и время на выполнение берется рандомно. Поэтому идет речь о сутках(24 часа). Другими словами мы за несколько дней можем заполнить БД данными.

lawer85 пишет:
if(($d >= '00' && $d < '09') || $d >= '22'){
                        foreach($rest as $key => $value){
                                if($d == $key){
                                        $time += $value;
                                        $date = date("Y-m-d H:i:s", $time);
                                }      
                        }
                }else{
                        $date = date("Y-m-d H:i:s", $time);
                        echo $date."<br />";
                }

Понятно, тебе нужно все лишь что бы значение timestamp в поле `created_at` принимало значения в диапозоне от 9 до 23 часов. Вот только, что за реализация такая интересная.. Возможно она и работает но лучше написать в условии, наверно вот так:
PHP:
скопировать код в буфер обмена
  1. $d = ltrim(date("H", $time), '0');
  2. if((($d >= 0) && ($d < 9)) || ($d >= 22)) {
  3.     /* ... */
  4. }
Ну и собственно вопрос должен был звучать как то так, чтобы его поняли правильно:
Помогите составить условие для if, ...


Я об этом не подумал. Спасибо за совет. Хотя по-моему это будет влиять не на саму работу скрипта, а скорее на внешний вид что ли. Т.е. будем работать с привычными цифрами 1 2 вместо 01 02

Кстати верно понял то, что мне надо.
lawer85 Отправлено: 03 Января, 2016 - 22:03:03 • Тема: Битовая маска реализация в классе • Форум: Вопросы новичков

Ответов: 3
Просмотров: 276
Уж извините за оффтоп, но я удивлен что вопрос такого характера относится к вопросам от новичков.
lawer85 Отправлено: 03 Января, 2016 - 18:32:54 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 426
Вобщем сделал.

Вот конечный код

PHP:
скопировать код в буфер обмена
  1. require_once "config.php";
  2.  
  3. $result = $mysqli->query("SELECT id FROM contacts");
  4. $row = array();
  5. for($i = 0; $i < $result->num_rows; $i++){
  6.                 $row[] = $result->fetch_assoc();
  7. }
  8. //echo "<pre>";
  9. //print_r($row);
  10. //echo "</pre>";
  11. foreach ($row as $id) {
  12.         $id = $id["id"];
  13.         $time = time();
  14.         $pause = 1200;
  15.         $rest = array('22' => 12 * 3600, '23' => 11 * 3600, '00' => 10 * 3600, '01' => 9 * 3600, '02' => 8 * 3600, '03' => 7 * 3600, '04' => 6 * 3600, '05' => 5 * 3600, '06' => 4 * 3600, '07' => 3 * 3600, '08' => 2 * 3600);
  16.         for($i = 0; $i < mt_rand(10, 600); $i++){
  17.                 $d = date("H", $time);
  18.                 if(($d >= '00' && $d < '09') || $d >= '22'){
  19.                         foreach($rest as $key => $value){
  20.                                 if($d == $key){
  21.                                         $time += $value;
  22.                                         $date = date("Y-m-d H:i:s", $time);
  23.                                 }      
  24.                         }
  25.                 }else{
  26.                         $date = date("Y-m-d H:i:s", $time);
  27.                         echo $date."<br />";
  28.                 }
  29.                
  30.                 $duration = mt_rand(60*5, 3600*5);
  31.                 $actions = array("development", "support", "marketing", "documents", "negotiations");
  32.                 $action = $actions[array_rand($actions)];
  33.                
  34.                 $sql = "INSERT INTO activities (contact_id, duration, employee_id, created_at, action) VALUES ('$id', '$duration', '$id', '$date', '$action')";
  35.                 $mysqli->query($sql);
  36.                
  37.                 $time += $duration + $pause;
  38.                
  39.         }
  40. }
  41.  
  42. $mysqli->close();
lawer85 Отправлено: 03 Января, 2016 - 12:20:24 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 426
Prizma пишет:
Возможно я идиот... но все же

1. Почему проверка в цикле?? у вас скрипт будет выполняться 24 часа в сутки? (тогда вопрос, как это возможно, я даже с set_time_limit(0) выжимал около 15-20 минут... Возможно изменить настройки сервера можно разогнать его до unlimited? (это вопрос - интересно)
2. Ладно пусть в цикле, но черт возьми почему проверки в конце и где остановка?
3. Раз остановки нет, не знаю сколько у вас записей в таблице contacts, но все же если предположить, что их очень много, то даже добавив к проверке остановку, все равно скрипт продолжит парсить contacts и не прервется пока первый цикл не переберет всю таблицу.

Я не спрашиваю зачем, могу предположить, что задание в вузе или ставите какой то эксперимент или это вообще просто пример, а реализация будет в ином месте...


lawer85 пишет:
Есть цикл, который наполняет БД случайным образом действиями сотрудников.

Мне нужно, чтобы скажем c 22:00 до 09:00 данные не добавлялись, что-то вроде отдыха.

если бы не смотрел на вашу реализацию сделал бы как то так:
PHP:
скопировать код в буфер обмена
  1. // возващает true если пора отдыхать
  2. function isTimeToSleep() {
  3.     $d = date("H", $time);
  4.     return (($d >= 0 && $d < 9) || $d >= 22);
  5. }
  6.  
  7. // прерываем скрипт там где надо
  8. if(isTimeToSleep()) {
  9.     /* делаем все что надо перед завершением, если надо */
  10.     die;
  11.     /* вместо die можно использовать sleep сделав расчет времени до утра и тогда ровно в 9:00 он продолжит пахать с того места где остановился) */
  12. }


Вы не поняли. Скрипт не работает 24 часа в сутки. Скрипт заполняет БД разными действиями сотрудников и этих действий от 10 до 600 и каждое выполняется от 5 минут до 5 часов. Из скрипта видно что кол-во действий и время на выполнение берется рандомно. Поэтому идет речь о сутках(24 часа). Другими словами мы за несколько дней можем заполнить БД данными.
lawer85 Отправлено: 03 Января, 2016 - 01:04:25 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 426
Строитель пишет:
lawer85 пишет:
А как правильно указать чтобы не было выполнения работы в диапозоне от 22 часов вечера до 9 утра?
PHP:
скопировать код в буфер обмена
  1. if (($d >= 0 && $d < 9) || $d >= 22) {
  2.     continue; //ничего не делаем
  3.     // или прерывайте цикл break; если это нужно
  4. }


Я понял, только вот в этом промежутке мне надо прибавить какое-то время к текущему скажем час ночи или 4 утра, чтобы начало след действия сотрудника началось после 9 утра, однако как сделать так, чтобы автоматом подбиралось сколько часов надо прибавить, т.е. 22 часа значит надо прибавить 12 часов, если час ночи то 9 часов и т.д.?
lawer85 Отправлено: 02 Января, 2016 - 23:20:59 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 426
dcc0 пишет:
Если $d больше 22 и меньше 9 ? Вы уверены?
Какие числа попадают в данный диапазон?


А как правильно указать чтобы не было выполнения работы в диапозоне от 22 часов вечера до 9 утра?
lawer85 Отправлено: 02 Января, 2016 - 16:11:06 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 426
Есть цикл, который наполняет БД случайным образом действиями сотрудников.

Мне нужно, чтобы скажем c 22:00 до 09:00 данные не добавлялись, что-то вроде отдыха.

Вот мой вариант, но он не верный. Есть записи начало работы до 9 утра.

PHP:
скопировать код в буфер обмена
  1. require_once "config.php";
  2.  
  3. $result = $mysqli->query("SELECT id FROM contacts");
  4. $row = array();
  5. for($i = 0; $i < $result->num_rows; $i++){
  6.                 $row[] = $result->fetch_assoc();
  7. }
  8. //echo "<pre>";
  9. //print_r($row);
  10. //echo "</pre>";
  11. foreach ($row as $id) {
  12.         $id = $id["id"];
  13.         $time = time();
  14.         $pause = 1200;
  15.         $rest = 12 * 3600;
  16.         for($i = 0; $i < mt_rand(10, 600); $i++){
  17.                 $date = date("Y-m-d H:i:s", $time);
  18.                 $duration = mt_rand(60*5, 3600*5);
  19.                 $actions = array("development", "support", "marketing", "documents", "negotiations");
  20.                 $action = $actions[array_rand($actions)];
  21.                
  22.                 $sql = "INSERT INTO activities (contact_id, duration, employee_id, created_at, action) VALUES ('$id', '$duration', '$id', '$date', '$action')";
  23.                 $mysqli->query($sql);
  24.                 $d = date("H", $time);
  25.                 echo $d."<br />";
  26.                 if($d > 22 && $d < 9){
  27.                         $time += $duration + $rest;
  28.                 }else{
  29.                         $time += $duration + $pause;
  30.                 }
  31.                
  32.         }
  33. }
  34.  
  35. $mysqli->close();
  36. ?>

Страниц (13): « 1 [2] 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB