Counter in DB
Tina
- php
Hallo
ich habe folgendes Problem.
Der Benutzer meines späteren Programmes ht jetzt schon die Möglichkeit einträge über einen PHP Screen in eine Datenbank einzufügen. Nun brauche ich eine Art Counter der immer ein hochzählt wenn ein Eintrag hinzuhkommt. In der Datenbank soll es so aussehn.
Eintrag Counter
Test1 1
Test2 2
Test3 3
Außerdem hat der User die Möglichkeit Einträge wieder zu löschen, löscht er jetzt einen Eintrag z.b Test 2 Soll der Counter neu hochzählen. Und die Datenbank aktualisiert werden
Eintrag Counter
Test1 1
Test3 2
Wie kann ich das machen. Das der Counter sich mit verändert. Bitte beachtet ich bin nicht so der Profi in PHP und MySQL.
Trotzdem vielen Dank ich hoffe auf eure Hilfe
Tina
Hallo
ich habe folgendes Problem.
Der Benutzer meines späteren Programmes ht jetzt schon die Möglichkeit einträge über einen PHP Screen in eine Datenbank einzufügen. Nun brauche ich eine Art Counter der immer ein hochzählt wenn ein Eintrag hinzuhkommt. In der Datenbank soll es so aussehn.
hallo,
benutze einfach auto_increment und primärschlüssel, damit wird bei jedem eintrag in deiner table der wert um eins erhöht und erhält eine eindeutige ID.
Warum willst nach dem löschen den wert count ändern, welchen zweck hat das ?
Danke aber das reicht leider nicht. Es dürfen keine Lücken in der DB entstehen.
Der Couter soll eigendlich eine Positions ID sein.
Die mir die eindeutige Stelle verrät.
Es muss doch irgendwie möglich sein ?????
Gruss
Tina
Hi,
Danke aber das reicht leider nicht. Es dürfen keine Lücken in der DB entstehen.
Warum sollen keine lücken entstehen dürfen?
MfG
Die Einträge auf dem Screen sollen anschließend mit Pfeilen tauschbar sein.
Also Eintrag 1 soll mit Eintrag 2 tauschbar sein usw...
Das dumme ist nur (das Problem hatte hier wohl schon mal eine hier)
Die Einträge sollen nicht nur auf dem Screen sondern auch in der Datenbank vertauscht werden.
Versteht einer mein Problem, es läuft quasi darauf hinaus, dass ich nicht weiß wie ich dieses tauschen machen soll.
Und ich dachte mir ich könnte mit meinem Couter die Position bestimmen.
Und um das zu machen muss dieser Lückenlos sein.
Tina
Hi,
Und ich dachte mir ich könnte mit meinem Couter die Position bestimmen.
Und um das zu machen muss dieser Lückenlos sein.
nein muss er nicht, nicht wenn du "vernüftigen" code produzierst.
allerdings reicht da die ID nicht aus. da solltest du wirklich noch eine
zweite spalte haben und da empfiehlt sich der tip von friction
MfG
Tut mir leid aber ich komme mit dem Tip von friction nicht so ganz weiter.
Hat denn keiner sowas schon mal programmiert wo man die Einträge auf dem Screen und gleichzeitig in der Datenbank verschieben kann.
Ich bekomme das einfach nicht hin sitze hier schon 2 Tage dran. So ein mist.
Tina
Hallo Tina,
Hat denn keiner sowas schon mal programmiert wo man die Einträge auf dem Screen und gleichzeitig in der Datenbank verschieben kann.
wieso willst du die Datensätze in der Datenbank verschieben - lass doch die IDs in Ruhe und änder nur das Feld ord (bei mir heißt es immer "sort", aber das ist ja egal). Beim auslesen verwendest du dann einfach "ORDER BY ord" und schon ist es alles richtig sortiert, ohne die IDs anzufassen.
Grüße aus Nürnberg
Tobias
Hi,
also du hast ja eine tabelle
----------------------------------
| ID | ORD | titel | eintrag | ...
----------------------------------
| 1 | 1 | asdf | asdfasd | ...
----------------------------------
| 2 | 3 | adfa | asfeqwd | ...
----------------------------------
| 3 | 2 | adfg | aersdfg | ...
----------------------------------
.....
du machst bei hinzufügen ein insert und setzte für alles den wert
außer für ID und ORD. ORD darf NULL sein ID ist der PrimKey und hat
AutoIncrement. nach dem INSERT also
$sql = "INSERT INTO tabelle ...
mysql_query($sql);
holst du dir die ID
$last_insert_id=mysql_insert_id();
und updates die spalte ORD. wenn du die daten ausgeben willst machst
du ORDER BY ORD und machst dort verweise auf dein script wo du die
position nach oben oder nach unten verschieben kannst. an dieses
script lieferst du die ID des Datensatzes und machst ORD so hoch bzw.
niedrig das er an der position des nachfolgenden oder vorhergehenden
elementes ist und bei diesem den ORD wert dementsprechend niedriger
oder höher. also quasi einfach ein tausch des ORD wertes das sind 2
UPDATEs und vorher noch 1/2 SELECTs. ich an deiner stelle würde der
einfachheit halber erstmal eins zum hochsetzt und danach eins zu
runtersetzten machen, zumindest 2 seperate scripte.
MfG
Danke aber das reicht leider nicht. Es dürfen keine Lücken in der DB entstehen.
also du benutzt count um die reihenfolge zu steuern.
ich benutzte dafür immer ein Feld ID und eine feld ORD.
Nachdem ich ein Insert gemacht habe mache ich direkt eine Update:
//funktion zur Abfrage der letzten ID nach dem INSERT
$last_insert_id=mysql_insert_id();
//DANN eine Update dieser table
$q="UPDATE table
SET ord
='$last_insert_id' WHERE id
='$last_insert_id' ";
mysql_query($q);
dann enthält dein Feld ORD den gleichen wert wie deine ID.
Und wenn dazwischen was löschst ändert da nicht an der reihenfolge
hi,
Nun brauche ich eine Art Counter der immer ein hochzählt wenn ein Eintrag hinzuhkommt.
wozu? würde es nicht ausreichen, wenn du dir dynamisch per abfrage die aktuelle anzahl zusürckgeben lassen würdest?
stichwort: COUNT()
gruß,
wahsaga
Hi,
was willst du mit diesem counter bezwecken? evt. hilft dir das hier
weiter http://dev.mysql.com/doc/mysql/de/counting-rows.html
MfG
yo,
wie bereits mehrfach erwähnt wurde geht das nicht über die ID des datensatzes zu lösen. eine tabelle ist eine unsortierte menge und man muss sich schon was einfallen lassen, um eine sortierung reinzubekommen.
Wie kann ich das machen. Das der Counter sich mit verändert.
der Counter verändert sich nur, wenn er nicht in der datenbank mit eingetragen wird, sondern bei der ausgabe. das klingt auf den ersten blick ein wenig verwirrend, sollte aber deine dynamik erzeugen können. zusätzlich brauchst du noch eine weitere spalte, welche die ordnung reinbringt, wie ebenfalls schon mehrfach erwähnt wurde. wenn die datensatze alle nacheinander eingefügt werden und das das kriterium für die reihenfolge ist, dann empfehle ich dir eine spalte mit dem datum/uhrzeit mit aufzunehmen. diese spalte kann dann für die ORDER BY klausel herangezogen werden. folgend ein beispiel, wie es funktioniert.
ID, Test1, Datum 1
ID, Test2, Datum 2
ID, Test3, Datum 3
Die abfrage dafür würde lauten.
SELECT ID, Eintrag FROM tabelle ORDER BY Datum
wie gesagt musst du nun noch den Counter reinbringen. dass geht entweder über PHP, indem du dort eine variable deklarierst, die bei 1 startet und sich nach jeder ausgabe eines datensatzes um 1 erhöht. oder aber du deklarierst eine variable in mysql und baust die viariable in die abfrage mit ein. das ist ein wenig komplizierter.
fällt nun einer der datensätze weg, sortiert er automatisch nach dem datum und der counter passt sich auch an.
Ilja
yo,
nochmal zur besseren erklärung, warum der counter ausserhalb der datenbank erzeugt werden muss, egal ob nun in php oder bei der abfrage in mysql. würde sich der counter bei jeden datensatz in der tabelle befinden und ein datensatz irgendwo gelöscht werden, dann müsste man alle nachfolgenden datensätze mit verändern. das wäre der arbeit zuviel. deshalb den counter dynamisch ausserhalb der datenbank erzeugen lassen.
Ilja