einfache frage

Und zwar hab ich eine einfache Frage, aber ich kapier es einfach nicht...

Ich will einen Datensatz aus mysql löschen, im Internet steht überall das:

DELETE FROM links WHERE id = '2';

und dazu funktioniert das nicht mal, denn mysql zeit mir dann immer diesen fehler:

#1054 - Unknown column 'id' in 'where clause'


Könnt ihr mir bitte einfach mal einen Befehl schreiben wenn:

Tabelle: test
Spalte: name

und darin, hätte ich z.B. gerne den 3 datensatz gelöscht.

wie muss der Befehl aussehen? ich kapiere es einfach nicht.
Vielleicht kapiere ich es ja, wenn ich ein Beispielbefehl mit diesen beispieldaten sehe.
 
Mal in der Annahme, dass deine Tabelle "test" so aussieht:

Spalte1 | Spalte2 | Name
abc | def | ghi
jkl | mno | pqr
stu | vwx | yz
.. | ... | ...

Und du möchtest den Datensatz, welcher den Namen "pqr" trägt löschen, dann lautet der entsprechende Befehl:
Code:
DELETE FROM test WHERE Name="pqr"

MfG
justj

Edit: Danke CDW, ich habe es geändert.
 
Die Datensätze müssen nicht geordnet gespeichert sein. D.h mysql hat keinerlei Kenntnis davon, welcher Datensatz für Dich der 3 ist ;). Entweder Du hast eine zusätzliche Spalte mit einer ID (der "Nummer") oder gibts eine andere Bedingung beim Löschen an.
PS:
DELETE FROM test WHERE name ='myname'
also ohne *
 
Ah vielen danke, das hab ich vestanden. Und das mit id ging bei mir nur nicht weil ich keine id spalte angelegt hatte.

aber wenn ich jetzt diese ids hab:
1
2
3

und ich lösche 1 dann bleiben noch

2
3

wie kann ich es machen, das die ids wieder zurück rutschen nach

1
2

???
 
Soweit ich weiß ist das einfach nicht möglich, du müsstest dann jede alte id, also zum Beispiel die 2 durch eine neue, in dem Fall dann die 1 ersetzen.
Warum willst du denn, dass die IDs immer vorne anfangen?
es macht doch grundsätzlich nichts, wenn da welche fehlen...

MfG
 
wenn ich z.b. ein gäste buch habe. will ich, das dann dort alle beiträge stehen, und ich dann mit löschen einen befehl an sql, und genau diesen eintrag dann gelöscht wird. wie mach ich das am besten?
 
Hi,

dann gibst du im jeweiligen Fenster von SQL Ausführen dein "Befehl" ein und klickst auf Absenden.
 
Dein Gästebuch müsste jedem Eintrag eine ID zuweisen, am besten automatisch aufsteigend, dass kannst du beim Anlegen der Tabelle für einzelne Spalten festlegen(autoincrement).
Ich nehme mal an, dass du löschen willst, wenn du als Admin eingelogt bist.
Du musst das Gästebuch dann so machen, dass entweder jeder Eintrag einen "Löschen" Button hat, der fest mit der ID des Eintrags verbunden ist, oder du machst einen Löschbutton, welchem du die ID des Beitrags, der gelöscht werden soll, selber mitteilen musst. Dafür wäre es dann sinnvoll, wenn dein Gästebuch die IDs der Einträge im "Adminmodus" anzeigt.

MfG
 
hmm... hab ich leider nicht so ganz verstanden. aber ich entscheide mich für die variante hinter jedem intrag ein löschen, wie würde das den ungeffähr aussehen, wenn das mein code zum anzeigen ist?


include "config.php";
mysql_connect (MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
die ("Verbindung zu MYSQL fehlgeschlagen");
mysql_select_db (MYSQL_DATABASE) OR
die ("Verbindung zur MYSQL DATABASE fehlgeschlagen");
$sql = "SELECT name, inhalt FROM gaestebuch";
$result = mysql_query($sql);
while($row = mysql_fetch_object($result))
{
echo "<center>";
echo "<table border=\"0\"><tr><td>";
echo "Name:";
echo "</td><td>";
echo $row->name;
echo "</td></tr>";
echo "<tr><td>";
echo "Inhalt:";
echo "</td><td>";
$row->inhalt = wordwrap( $row->inhalt,30, "<br>", 1);
echo $row->inhalt;
echo "</td></tr>";
echo "</table>";
echo "<br>";
echo "</center>";
}
 
Original von gugugs
wie kann ich es machen, das die ids wieder zurück rutschen nach
Am besten gar nicht, denn IDs haben den Zweck, einen Datensatz eindeutig zu identifizieren, egal zu welchem Zeitpunkt. Wenn du die IDs aber regelmäßig neu verteilst, dann ist der Datensatz mit ID 2 nicht zu jedem Zeitpunkt derselbe.

Würden beispielsweise mehrere Leute gleichzeitig die Datensätze bearbeiten und jeweils kurz hintereinander #5 löschen wollen, so löscht der erste den korrekten Datensatz, der zweite hingegen den Datensatz, der vorher #6 war, weil du die IDs nach dem Löschen neu sortierst.
 
stimmt, klingt einleuhtend...
aber wie bekomme ich jetzt das hin, was ich vor hab. hab mir jetzt schon ziemlich viel durchgelesen, kapiere es aber immer noch nicht. kann mir nicht einer mal bitte helfen? und ein beispiel oder so mal schreiben oder zeigen? bitte bitte
 
OK, da gibt es zwei Sachen:

Zum einen gibst du jedem Dateinsatz eine eindeutige Nummer, die sich später nicht mehr ändert. Das wird in Datenbanksystemen ein "Primärschlüsse" genannt und dieser Primärschlüssel wird verwendet um Datensätze zu identifizieren (und auch zu indizieren). Angenommen du hast folgenden Datensatz:

Code:
ID | Name       | Adresse
--------------------------------
15 | Herr Meier | Frankfurterstraße 55

und möchtest den jetzt löschen. Woher soll MySQL genau wissen, welchen Datensatz du löschen willst?
Du kannst einfach sagen: "lösche den mit der ID 15" und genau dieser Datensatz ist weg.

Code:
delete from `tabelle` where `ID` = 15;

Du kannst eine solche Durchnummerierung erzeugen, indem du ein Feld in deiner Tabellenstruktur von Type "Integer" (oder sonstige Zahl) mit "auto_increment" versiehst und am besten auch gleich als Primärschlüssel ("Primary Key") hernimmst, damit deine Datenbank schneller wird.

Wenn du jetzt einen neuen Datensatz erzeugst, lässt du die Definition für das Indexfeld einfach weg:

Code:
insert into `tabelle` ( `Name`, `Adresse` )  values ( 'Horst', 'Teststrasse 15' );

oder du füllst den Wert mit "null":

Code:
insert into `tabelle` ( `ID`, `Name`, `Adresse` )  values ( null, 'Horst', 'Teststrasse 15' );

Dann sorgt das auto_increment dafür, dass das Feld einen neuen, aufsteigenden Wert enthält.

Wenn du die Datensätze ausgibst (per PHP), liest du einfach die ID mit aus und kannst anhand davon dann edit- oder delete-Statements generieren:
Code:
<a href="index.php?deletepost=15">Loeschen</a>
PHP:
<?php
if ($_GET['deletepost']) {
$id = intval($_GET['deletepost']);

$sql = "delete from `tabelle` where `ID` = $id";
mysql_query($sql);
}
?>

Natürlich musst du das ganze noch absichern und besser kontrollieren. Was man mit einer Adminoberfläche eben so macht.
Aber das ist das Prinzip dieser Auto_increment Sache ...

Zweitens:
Wenn du deine Posts auf der Seite durchzählen willst, solltest du das nicht über die Datenbank, sondern über eine PHP-Logik machen.

Post_Nummer = Nummer_vom_ersten_Post + Reihenfolge_der_Anzeige

Du musst also nur bei jeder Ausgabe mitzählen und den Zähler jeweils um 1 erhöhen.

mfg, metax.
 
also, das mit dem auto_increment und dem primary_key hab ich sowieso schon gemacht.

aber den php code unten versteh ich teilweise wieder nicht so ganz. wird jetzt einfach nur die id zum jeweiligen post abgerufen? und diese dann gelöscht? wenn ja, warum dann die if anweisung? oder ist es etwas ganz anderes?
 
Das war bloß ein Beispiel, wie du über PHP an die ID kommen kannst.

1. Du listest alle Einträge z.B. in einer Tabelle auf. Zu jedem Eintrag kannst du dann einen Link der Form "index.php?delete=<id>" machen.

2. Wenn der Administrator auf den Link klickt wird index.php aufgerufen mit delete=<id> als Parameter.

3. Dort schaust du, ob eine Löschen-Anweisung erfolgen soll (also ob der delete-Parameter gesetzt wurde). Das ist die If-Abfrage.

4. Falls "delete" gesetzt wurde, löst du einfach eine MySQL-Query aus, die den Entsprechenden Eintrag entfernt. Dazu nimmst du die Variable "delete", die du vorher übergeben hast und welche die zu löschende ID enthält.

Falls du mit diesem Mechanismus noch Probleme hast, solltest du dir nochmal den Manual-Teil zum Abfragen von Seitenparametern durchlesen. Das ist nämlich kein MySQL-Spezifischer Teil, sondern es wird allgemein in der Webseitenkommunikation verwendet.

mfg, metax.
 
Zurück
Oben