2016-08-09 4 views
1

Я - разработчик PHP, который плохо учится, поэтому легко на меня. :)Попытка изменить порядок записей в строке

У меня есть инструмент, который я пытаюсь создать, который собирает записи в строке и заказывает их, поэтому значения NULL заканчиваются в конце строки. Так, например, если у меня есть строка, которая выглядит как этот

| LeaderID | Person1 | Person2 | Person3 | Person4 | Person5 | Person6 | 
|-----------|---------|---------|---------|---------|---------|---------| 
| 1  | NULL | 5  | 8 | NULL | 9 | 11 | 

Я хочу, чтобы иметь возможность читать строки значений и он записать обратно в строку следующим образом:

| LeaderID | Person1 | Person2 | Person3 | Person4 | Person5 | Person6 | 
|----------|---------|---------|---------|---------|---------|---------| 
| 1  | 5  | 8  | 9 | 11 | NULL | NULL | 

Надеемся это имеет смысл, но, пожалуйста, спросите, если нет. Я искал и не могу найти решение этой проблемы.

Заранее благодарен!

+0

Покажите код, как вы его генерируете, и мы можем вам помочь. – aynber

+0

Вы говорите о строках, но вы показываете столбцы, я не уверен, что вы хотите здесь ... это база данных или просто массив с ключом/значениями? – NDM

+0

Как/почему 'person4' изменяется от' NULL' до '11'? Не должно ли «person4» всегда иметь такое же значение? – chris85

ответ

-1

Я не могу придумать SELECT, который не будет длительностью романа, но эта серия UPDATE может использоваться для изменения ваших данных (на постоянной основе) или использования на временной копии ваших данных, чтобы получить что я думаю, вы хотите.

UPDATE theTable SET Person1 = Person2, Person2 = NULL WHERE Person1 IS NULL; 
UPDATE theTable SET Person2 = Person3, Person3 = NULL WHERE Person2 IS NULL; 
UPDATE theTable SET Person3 = Person4, Person4 = NULL WHERE Person3 IS NULL; 
UPDATE theTable SET Person4 = Person5, Person5 = NULL WHERE Person4 IS NULL; 
UPDATE theTable SET Person5 = Person6, Person6 = NULL WHERE Person5 IS NULL; 

Это не гарантирует, что вы хотите на первом проходе; вам может потребоваться повторить эту серию обновлений пять или шесть раз, чтобы «просочиться» все значения (в зависимости от количества соседних нулей).

Фактически это можно сделать в одном запросе, но это было бы намного сложнее, чем это.

+0

Спасибо Uueerdo! Как узнать, когда прекратить выполнение обновлений? Разве это не должно быть сделано вручную? – NorthernWolf

+0

@NorthernWolf, когда во всей партии нет «затронутых строк», все готово. Если вы не хотите отслеживать это, то ... Если Person1-5 изначально было нулевым, значение в Person6 перемещается «вверх» по одному пятну каждой «партии». Итак, предполагая, что Person6 - последнее место, вы гарантированно выполняетесь в 5 "партиях". _Интуитивная интуиция подсказывает, что точное число, необходимое для набора строк, равно наибольшему числу нулевых значений в строке в этом модуле, число возможных полей значений в строке. – Uueerdo

Смежные вопросы