MySQL Löschen mit Limit
Dies scheint sehr einfach, aber es ist zu scheitern. Alles was ich will zu tun ist, löschen Sie alle, aber die erste Zeile mit dem code unten.
$sql = "DELETE FROM ".TABLE_PREFIX."news WHERE course_id = $course_id LIMIT 1,18446744073709551615";
$result = mysql_query($sql, $db);
Wenn ich dies tun...
$sql = "SELECT news_id FROM ".TABLE_PREFIX."news WHERE course_id = $course_id LIMIT 1,18446744073709551615";
$result = mysql_query($sql, $db);
while ($row = mysql_fetch_assoc($result)) {
echo $row['news_id'] . '<br>';
}
Alle news_ids echo sind mit Ausnahme des ersten. Warum ist die delete-Anweisung nicht arbeiten, wenn die Anweisung select ist arbeiten?
- Was bestimmt, was die erste Zeile ?
- Auch das ist nicht die richtige syntax für LIMIT in einer DELETE - Anweisung, die Sie gerade brauchen, um eine ganze Zahl für die maximale Anzahl von Zeilen zu löschen: dev.mysql.com/doc/refman/5.0/en/delete.html
- Die "GRENZE 1,18446744073709551615" Teil sein soll, das überspringen der ersten Zeile, dann löschen Sie alles andere. Ich habe diese Idee von hier: stackoverflow.com/questions/2827029/mysql-skip-first-10-results
- Was auch immer Sie tun, ich rate definieren
ORDER BY news_id ASC
so dass es immer sortiert werden, wie Sie denken, es ist sortiert. Ich habe nie versucht zu löschen, also kann ich nicht viel Hilfe. Sie könnten möglicherweise wählen Sie die erste news_id, dann löschenWHERE course_id = $course_id AND news_id != $news_id
- diese Frage ist zu WÄHLEN, nicht zu LÖSCHEN. Die beiden Syntaxen sind ähnlich, aber nicht identisch.
- Sie müssen löschen Sie alle Zeilen bis auf eine, egal welche, oder gibt es eine bestimmte Zeile, die der ersten?
- news_id ist ein auto-increment Feld. Also, im Grunde die niedrigste news_id für einen bestimmten Kurs wäre die "erste" ein-und es sollte nicht gelöscht werden. Hilft das definieren, dieses problem ein bisschen mehr sein?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die delete-Anweisung nicht funktioniert, da der falsche syntax in der Nähe der Grenze keyword...man kann nicht
LIMIT 1,18446744073709551615
...LIMIT
werden müssen, gefolgt von einer einzigen Zahl, wenn verwendet mitDEELTE
Referenz: LÖSCHEN VON MYSQL
Nur in einer SELECT-Anweisung können Sie
LIMIT 1,18446744073709551615
KlauselReferenz: WÄHLEN SIE MYSQL
Was Sie tun können, ist alternativ finden Sie die course_id der ersten Zeile, die Sie löschen wollen, (und hoffentlich, wenn die Tabelle richtig eingerichtet ist und es ist ein primary key für die Tabelle und die auto-Schritten), etwas wie die folgenden:
Oder dies so gut funktioniert:
$sql = "SELECT news_id FROM ".TABLE_PREFIX."news WHERE course_id = $course_id ORDER BY news_id asc LIMIT 1"; $result = mysql_query($sql, $db); $row = mysql_fetch_assoc($result); $sql = "DELETE FROM ".TABLE_PREFIX."news WHERE course_id = $course_id AND news_id!='".$row['news_id']."'"; $result = mysql_query($sql, $db);
Wie @Sabashan sagte BEGRENZUNG in der DELETE-Anweisung kann nur ein parameter.
Wenn Sie ausschließen wollen, die 1. Zeile, verwenden Sie so etwas wie:
Die innere SELECT-holt die Datensätze auszuschließen.
Das äußere SELECT löst das problem, dass Sie nicht wählen Sie aus der gleichen Tabelle, den Sie löschen aus.
Da die innere SELECT umschlossen ist von der äußeren select MySQL materialisiert das Ergebnis in eine temp-Tabelle und verwendet, dass anstelle der Sie die Abfrage erneut ausführen für alle löschen (was MySQL nicht zulassen).
$sql = "DELETE FROM ".TABLE_PREFIX."news WHERE course_id = $course_id AND primary_key NOT IN (SELECT * FROM (SELECT primary_key FROM ".TABLE_PREFIX."news ORDER BY news_id LIMIT 1 OFFSET 0))"; $result = mysql_query($sql, $db);
Gedanken?Finden Sie die id der ersten Zeile und eine
oder finden Sie die ids, die Sie haben, zu löschen und