2016-07-05 2 views
1

У меня есть столбец таблицы с именем sort, который используется для сортировки строк (1 2 3 ... и т. Д.).
Когда я вставляю новую строку, как я могу автоматически добавить приращение +1 в этом столбце?Как добавить +1 в столбец сортировки

Например, если последнее значение строки 20, новое должно быть 21.
Я попытался установить этот столбец как автоприращение но PHPMYADMIN говорит, что только один столбец может быть auto (id в моем случае).

Другим решением было бы вставить новую строку в первую строку со значением 1 в столбце сортировки, но как я мог в этом случае изменить все остальные значения ниже?

Любая помощь?

try { 
$stmt = $db->prepare('INSERT INTO ' . $table. ' (title, content, sort) VALUES (:title, :content, :sort)') ; 
$stmt->execute(array(
':title' => $title, 
':content' => $content, 
':sort' => ???, 
)); 
header('Location:admin.php'); 
exit; 

} catch(PDOException $e) { 
echo $e->getMessage(); 
} 
+1

Если идентификатор уже является автоматическим приращением, какое дополнительное значение задается столбцом сортировки? –

+0

Вы можете подсчитать существующие записи или получить максимальный существующий вид и использовать его в том же SQL для вставки – ChrisBint

+0

@ piet.t позже У меня есть процедура для изменения значений в столбце 'sort' в соответствии с заданным массивом php, и это невозможно с столбцом 'id', поскольку он имеет первичный ключ. – bonaca

ответ

1

Попробуйте Этот запрос

"INSERT INTO $table (title, content, sort) VALUES ($title, $content,(SELECT MAX(sort)+1 FROM $table))" 
+0

Но тогда в качестве подготовленного оператора и +1 для максимальное значение ... – jeroen

1
try { 
$stmt = $db->prepare('INSERT INTO ' . $table. ' (title, content, sort) VALUES (:title, :content, :sort)') ; 
$stmt->execute(array(
':title' => $title, 
':content' => $content, 
':sort' => $sort+1 
)); 
header('Location:admin.php'); 
exit; 

} catch(PDOException $e) { 
echo $e->getMessage(); 
} 
+0

Как я могу получить значение $ sort? – bonaca

+0

'$ count = mysql_num_rows (SELECT sort из $ table order by sort desc);' используя этот запрос, вычисляет значение no строк, если строки 18 означают добавление значения сортировки + 1 –

0

мне любопытно, как к тому, что вы используете для своего рода. Вы можете просто заказать существующий идентификатор для сортировки строк. Поскольку этот столбец уже автоматически увеличивается, как вы сказали. Наличие другого столбца, дублирующего то, что уже доступно, обычно является плохим дизайном базы данных. Возможно, я не совсем понимаю, что вы пытаетесь сделать, не могли бы вы дать немного больше объяснений относительно того, что именно вы пытаетесь выполнить с помощью столбца сортировки?

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

SELECT сортировать из $ table заказать сортировать по убыванию. затем добавьте это значение, а затем вставьте значение в новое.

1

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

$ запрос = ВЫБОР user_id, value ОТ My_TABLE ORDER BY user_id по убыванию LIMIT 1;