Я создаю простую веб-страницу PHP с базой данных MySQL. База данных MYSQL имеет следующее содержимое: (иллюстрация слева) Я просто хочу знать возможный способ выполнения некоторых манипуляций с данными для достижения результатов в правой части ниже.
(initial value) (final result)
ID | MINUS '1'(to "next" ID's) ID | ID |
1 | 0 1 | ------------> 1 |
2 | 1 --> (will minus '1' to ID 3 2 | ------------> 2 |
3 | 0 up to the last) 3-1 = 2 | ------------> 2 |
4 | 0 4-1 = 3 | ------------> 3 |
5 | 1 --> (minus '1' AGAIN to ID 6 5-1 = 4 | ------------> 4 |
6 | 0 up to the last) 6-1 = 5 -1 ---> 4 |
7 | 0 7-1 = 6 -1 ---> 5 |
Он просто подсчитывает количество минусов, а затем вычитает его из ВСЕХ идентификаторов, следующих за ним. Идентификатор 2 сообщает следующему идентификатору, который равен 3, чтобы вычесть 1 до последнего идентификатора (3-1, 4-1, 5-1, 6-1, 7-1), но пришел другой экземпляр. ID 5 указывает ID 6 вычесть себя снова до последнего, поэтому МИНУС 2 от ID 6 до последнего ID. всего 6-1, 7-1 ---> 6-2, 7-2.
Я знаю, что для вас это звучит очень легко, но я новичок и считаю это трудным. Простите за головную боль. Надеюсь, кто-то поможет, спасибо!
Мой DML похож (просто для иллюстрации, он должен быть на php, я его конвертирую, просто помогите мне в ЛОГИКЕ)
for($x=0;$x<num_rows;$x++)
{
if(MINUS = 1){
query(UPDATE table_name SET ID=ID-1 WHERE ID = $x);}
}
Что-то вроде этого, я все еще новичок в циклах принятия решений. Буду признателен, если почините мою петлю. Я новичок в этом сообществе, прошу вашего понимания.
2 ответа
Вы можете сделать это в MySQL, используя переменные или стандартный SQL. Вот стандартный SQL:
select id, minus,
(id - coalesce((select sum(minus) from table t2 where t2.id < t.id), 0)) as newId
from table t;
Вот версия переменной:
select id, minus,
(id - minus + (@value := @value + minus)) as newId
from table t cross join
(select @value = 0) const
order by id
Вы можете использовать реализацию MySQL следующим образом:
select id, minus,
(id - coalesce((select sum(minus) from table t2 where t2.id < t.id), 0)) as newId
Из таблицы t;
Идея кода пришла из сообщения Гордона, вот уточнение.
Первая часть - это select
, в которой говорится, что вы хотите выбрать определенный ввод из mysql. id, minus
следует за ним и означает, что вы хотите вернуть значения id
и minus
по завершении выполнения запроса.
Остальная часть попадает в третью часть, где вы выполняете вычитание и возвращаете значение вычитания как newId. Поэтому, когда sql вернется, он получит строку с ID, MINUS и NEWID в качестве заголовков.
Вычитание работает следующим образом: coalesce возвращает первое ненулевое значение (т.е. 1
) в списке. table t2
использует вторую версию таблицы и называет ее t2, чтобы вы могли сравнить информацию.
Надеюсь, это прояснило вам ситуацию!
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.