如何在排序列中添加+1

时间:2016-07-05 12:10:59

标签: php mysql identity-column

我有一个名为sort的表格列,用于排序行(1 2 3 ...等) 当我插入新行时,如何在此列中自动添加增量+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();
}

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

尝试此查询

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

答案 2 :(得分:1)

您可以通过添加一个值来重新检索最后一个值和sotre。

$ query = SELECT #pragma message("MYMACRO == " MYMACRO) // will print project dir during compilation std::cout << MYMACRO << std::endl; //will print project dir at run time user_id 来自value ORDER BY My_TABLE DESC 限制1;

答案 3 :(得分:0)

我很好奇你使用的是什么。您可以按现有ID排序以对行进行排序。正如你所说的那样,该列已经自动增量。让另一列重复已经可用的通常是糟糕的数据库设计。也许我还没有完全理解你想要做什么,你能不能再解释一下你要用sort列完成什么?

如果您按照指定的方式进行设置,则必须按列排序降序进行查询和排序。

按排序desc从$ table order中进行SELECT排序。然后取该值加一,然后将值插入新值。