Создайте базу данных PHP для записей, используя cronJob и SQL, чтобы обновлять базу данных, сдвигая значения вправо каждую ночь

#php #mysql #sql #row

#php #mysql #sql #строка

Вопрос:

Я пытаюсь запустить PHP-скрипт CronJob, задав предыдущий вопрос о том, как запускать PHP-скрипт каждую полночь. С тех пор я был в тупике по довольно незначительной, на первый взгляд, проблеме. Я прочитал несколько статей о получении строк из баз данных, отображении значений и т.д. и внедрял код. Но, похоже, они не совсем предназначались для запуска php-файла. Итак, вот код

 <?php
$connection = mysqli_connect('localhost', 'root', '', 'pointsmanager');
$before0d = "SELECT * FROM points WHERE today_points";
$before1d = "SELECT * FROM points_history WHERE 1d_before";
$before2d = "SELECT * FROM points_history WHERE 2d_before";
$before3d = "SELECT * FROM points_history WHERE 3d_before";
$before4d = "SELECT * FROM points_history WHERE 4d_before";
$before5d = "SELECT * FROM points_history WHERE 5d_before";
$before6d = "SELECT * FROM points_history WHERE 6d_before";
$before7d = "SELECT * FROM points_history WHERE 6d_before";

UPDATE points_history
SET 1d_before = $before0d, 2d_before = $before1d, 3d_before = $before2d, 4d_before = $before3d, 5d_before = $before4d, 6d_before = $before5d, 7d_before = $before6d,
WHERE condition;
?>
  

Вот что я хочу сделать. Я хочу создать журнал учета баллов, которые пользователь получал изо дня в день. В одной базе данных я хочу, чтобы она выбирала столбец с именем today_points и сохраняла его в переменной:

просмотрите базу данных под названием quot;точкиquot;

Затем я хочу, чтобы он сохранял каждое значение недели из базы данных в переменной.

смотрите базу данных 'points_history'

И, наконец, обновите points_history, сдвигая все его текущие значения вправо

Смотрите это здесь

и получая значение столбца с именем ‘today_points’ из другой базы данных под названием ‘points’ и помещая его в ‘1d_before’ (таким образом, каждую полночь все значения сдвигаются на единицу вправо, а ‘todays points’ теперь на один день раньше), Может кто-нибудь показать мне, как это сделать в PHP. Я честно старался изо всех сил, выполняя приведенный выше фрагмент. Но это не работает. Буду признателен любому, кто покажет мне код для чего-либо подобного. Спасибо!

Комментарии:

1. Вам нужно узнать о нормализации базы данных. Если в именах ваших столбцов есть числа, то это признак того, что ваша схема не нормализована.

Ответ №1:

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

 UPDATE points_history 
SET
    7d_before = 6d_before,
    6d_before = 5d_before,
    5d_before = 4d_before,
    4d_before = 3d_before,
    3d_before = 2d_before,
    2d_before = 1d_before,
    1d_before = (
        SELECT 
            today_points
        FROM
            points
        WHERE
            user_id = '123'
        )
WHERE
    user_id = '123';
  

Допустим, вы хотите обновить ее для идентификатора пользователя ‘123’. Чтобы сдвинуть значения вправо, мы сначала скопируем значение 6-го дня на 7-й, затем с 5-го на 6-й, затем с 4-го на 5-й и так далее. В конце мы обновим значение первого дня, выбрав его из today_points таблицы.

Вот рабочая скрипка

Комментарии:

1. что такое идентификатор пользователя?

2. Как хранятся ваши данные? Есть ли какой-либо идентификатор или обе таблицы points_history и points имеют только одну строку?

3. одна строка в обеих таблицах. Это может измениться.

4. Если только одна строка. затем удалите оба WHERE предложения из запроса.

5. Я знаю, что это глупый вопрос, но это файл sql, верно?