Portal > Foren > Datenbanken, Server, Betriebssysteme und sonstige Programmiersprachen > Datenbanken > MySQL Tabelle neu durchnummerieren (immer von 1)
Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 16.04.2009, 23:53 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 13
Standard MySQL Tabelle neu durchnummerieren (immer von 1)

Hi,

also ich habe folgendes Problem bzw will folgendes machen, in einer Tabelle wird ja bei einem INSERT eine neue noch nie vorkommende zahl benutzt, nun möchte ich aber das in der tabelle ein Feld immer mit 1 beginnt, also:
id|platz|...
1223|1|...
1224|2|...
nun soll aber wenn die Zeile mit platz->1 gelöscht wird, die 2. zeile nachrücken und der Platz auf 1 gesetzt werden. Gibt es da irgendwie eine Funktion in mysql?

gruß
mira ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 08:41 Nach oben    #2
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 3.198
Standard

Eine ID ist eigentlich genau dafür da, dass sie immer eindeutig bleibt.

Was du aber machen kannst, ist, dass du ein update-query zusammenbaust á la:

update id = id-1 where id > 1223
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 11:47 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 13
Standard

Zitat:
Zitat von Jann Hendrik Beitrag anzeigen
Eine ID ist eigentlich genau dafür da, dass sie immer eindeutig bleibt.

Was du aber machen kannst, ist, dass du ein update-query zusammenbaust á la:

update id = id-1 where id > 1223
ne so mein ich das nicht, die ID soll schon so bleiben wie sie ist ich möchte das die zahl bei platz nachrutscht.
Aber das mit dem "UPDATE `wait` = 'platz'-1 ..." würde ja auch da klappen, ich werds erstmal so machen evtl hat ja jemand noch eine Idee der könnte sich dann ja hier noch melden :)

gruß
mira ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 13:27 Nach oben    #4
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 696
Standard

Also wenn immer die älteste ID dann Platz 1 ist, seh ich keinen Grund für ein Update.
Kommt drauf an, wie man das ganze dann ausliest und auswertet.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 15:39 Nach oben    #5
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 3.198
Standard

Aber damit immer der älteste Eintrag die kleinste ID hat, muss diese doch irgendwann geändert werden, oder verstehe ich dich (CIX88) falsch?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 16:25 Nach oben    #6
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 696
Standard

Hmmmm, ich dachte jetzt daran, dass die ID ja meist auto_increment ist. Damit wäre ja automatisch der älteste Eintrag die kleinste ID. Mit dem Platz 1 macht natürlich nur dann Sinn, wenn man die Ausgabe nach der ID sortiert. Also bevor ich ein zusätzliches Query losschicke, würde ich andere Lösungen mir überlegen, was natürlich vom Verwendungsweck abhängt.

Nehmen wir an, wir wollen die Plätze nach einen Punktestand ausgeben.
z.B. http://www.cix-blog.de/tetris.php
Dann schreib ich nicht die ganze Datenbank um :)
Sondern lese es so, dass die höchste Punktzahl oben ist, was dann Platz 1 bedeuten würde. Ungefähr so hatte ich das gemeint.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 17:15 Nach oben    #7
Neuer Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 13
Standard

Ja bei einer Rangliste wäre es ja einfach, einfach die Zeilen der Reihenfolge nach auslesen und die dementsprechende Zahl davorsetzen. Ich brauch aber jeweils nur eine Zeile. Das ganze wird eine Warteschlange was ich natürlich machen könnte wäre ne While schleife und dann halt hochzählen bis der entsprechende Eintrag kommt.


gruß
mira ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 18:03 Nach oben    #8
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 696
Standard

Jo bei der Schleife haste dann aber etliche Updates-Querys ...
Vielleicht könnte mna das aud 2 Querys beschränken.
Ein Query müsste dazu die älteste ID auf Platz 1 setzen, wobei Platz dann INT ist.
Danach ein Query was (sortiert nach ID oder so) was dann INT hochzählt.

Mein Gedanke irgenwie sowas wie:

Code:
UPDATE tabelle AS t SET
 t.platz = 1 + (SELECT platz FROM tabelle ORDER BY id ASC )
Kann auch sein das es Blödsinn ist, ist jetzt mal Brainstorming (Ideenfindung) ...
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 18:24 Nach oben    #9
Neuer Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 13
Standard

Zitat:
Zitat von CIX88 Beitrag anzeigen
Jo bei der Schleife haste dann aber etliche Updates-Querys ...
ne ohne update-Querys direkt ausgeben nur würde dann bei jedem Aufruf halt die komplette Tabelle durchgegangen werden. Ich weiß halt nur nich in wie weit das nachher auf die Performance geht... sollte fürn anfang aber auf jedenfall reichen.
PHP-Code:
$sql mysql_query("SELECT....");
$platz 0;
while(
$row mysql_fetch_object($sql))
{
  
$platz++;
  if(
richtige zeile)
  {
     break;
  }
}
echo 
$platz
gruß
mira ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 18:39 Nach oben    #10
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 696
Standard

Hmmmmm, jetzt hab ich mal gefummelt:

Code:
SET @c:=0;
UPDATE test 
SET platz = (SELECT @c:=@c+1)
ORDER BY id ASC;
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 22:51 Nach oben    #11
Neuer Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 13
Standard

Zitat:
Zitat von CIX88 Beitrag anzeigen
Hmmmmm, jetzt hab ich mal gefummelt:

Code:
SET @c:=0;
UPDATE test 
SET platz = (SELECT @c:=@c+1)
ORDER BY id ASC;
Ich muss zugeben das ich nur die hälfte davon verstehe aber es funktioniert :) Herzlichen Dank :)

gruß

Geändert von mira (17.04.2009 um 23:13 Uhr)
mira ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 23:30 Nach oben    #12
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 696
Standard

Naja es einfach eine MySQL Variable erstellt, die dann hochgezählt wird.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.04.2009, 23:46 Nach oben    #13
Neuer Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 13
Standard

ahh ok also ist
SET @c:=0;
gleichzusetzen mit
$c = 0;
in php? Ok dann hab ichs jetzt doch verstanden is ja ganz einfach


gruß
mira ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.04.2009, 11:06 Nach oben    #14
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 696
Standard

jo im Prinzip ja, wird nur zu selten benutzt, deshalb kommt man nicht drauf :)
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQL RegExp nächste Zeile Sekundentakt Datenbanken 1 07.03.2009 15:45
MySQL 5.1 kommt in die Beta-Phase Ben Nachrichten 1 02.03.2006 14:31
MySQL: Abfrage aus zweiter Tabelle. Sebastian PHP-Programmierung 6 16.12.2005 00:01
MySQL Datasets nach HSQLDB exportieren jfreak Enterprise Java 0 16.11.2005 20:01
[SQL] Zufallsdatensatz auslesen - MySQL 3.23 Ben Tutorials 0 16.03.2005 00:06


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47