2016-07-05 12 views
1

Ich habe eine Tabellenspalte mit dem Namen sort, die zum Sortieren von Zeilen verwendet wird (1 2 3 ... usw.).
Wenn ich eine neue Zeile einfüge, wie kann ich automatisch ein Inkrement +1 in dieser Spalte hinzufügen?So fügen Sie +1 in einer Sortierspalte hinzu

Zum Beispiel, wenn die letzte Zeile Wert 20 ist, sollte der neue sein 21.
Ich habe versucht, diese Spalte als Autoinkrement zu setzen, sondern phpMyAdmin sagt, dass nur eine Spalte auto sein kann (id in meinem Fall).

Eine andere Lösung wäre, die neue Zeile als erste Zeile einzufügen, mit dem Wert 1 in der Sortierspalte, aber wie könnte ich in diesem Fall alle anderen Werte unten ändern?

Irgendwelche Hilfe?

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

Wenn die ID bereits auto-increment ist, welcher zusätzliche Wert wird von der Sortierspalte angegeben? –

+0

Sie könnten die vorhandenen Datensätze zählen oder Max der vorhandenen Sortierung und verwenden Sie diese in der gleichen SQL zu einfügen – ChrisBint

+0

@ piet.t später Ich habe eine Prozedur zum Ändern von Werten in der Spalte "Sortieren" nach einem bestimmten PHP-Array, und es ist nicht möglich mit 'ID' Spalte, weil es den Primärschlüssel hat. – bonaca

Antwort

1

Diese Abfrage

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

Aber dann als vorbereitete Anweisung und +1 für die maximaler Wert ... – 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

Wie bekomme ich '$ sort' Wert? – bonaca

+0

'$ count = mysql_num_rows (SELECT sortieren aus $ table order by sort desc);' mit dieser Abfrage berechnen die Anzahl der Zeilen, wenn Zeilen 18 bedeutet, fügen Sie die Sortierwert + 1 –

0

Ich bin neugierig, wie versuchen, was Sie Art für verwenden. Sie können einfach nach der vorhandenen ID sortieren, um die Zeilen zu sortieren. Da diese Spalte bereits automatisch inkrementiert wird, wie Sie gesagt haben. Eine andere Spalte zu duplizieren, was bereits verfügbar ist, ist im Allgemeinen ein schlechtes Datenbankdesign. Vielleicht verstehe ich nicht ganz, was Sie zu tun versuchen. Könnten Sie ein wenig mehr erklären, was Sie mit der Sortierspalte erreichen wollen?

Wenn Sie diese Einstellung so vornehmen, wie Sie festgelegt haben, müssen Sie eine Abfrage und Reihenfolge nach der Spalte absteigend sortieren.

SELECT sortieren aus $ Tabelle sortieren nach sortieren desc. dann nimm diesen Wert addiere einen und füge dann den Wert in den neuen ein.

1

Sie können den letzten Wert abrufen und diesen Wert addieren, indem Sie einen Wert hinzufügen.

$ query = SELECT user_id, value VON My_TABLE ORDER BY user_id DESC LIMIT 1;