#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 и сохраняла его в переменной:
Затем я хочу, чтобы он сохранял каждое значение недели из базы данных в переменной.
И, наконец, обновите 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, верно?