Kleines problem mit Id's

Tobias Staffel

Grünschnabel
Guten Tag

und zwar habe ich für mein kleines CMS ein Forum gebastelt, was auch eigentlich geht
nur stört es mich ein wenig, das jede Kategorie die Catid auf 1 gesetzt wird. Ja ok das ist zwar mein fehler, weil ich die id ja auf 1 setzte nur leider weiß ich nicht wie ich die abfrage gestallten soll, das er schauen soll wie die letzte Catid ist und diese dan +1 nehmen soll und diese dan für die neue Kategorie nehmen soll. Ich habe mir gedacht das ich das mit einem $row['cid'] abfragen könnte doch leider hat das nicht hin.

Hier mal wie ichs mir denke könnte funktionieren

PHP:
if(mysql_num_rows == 1) {
    $row['cid'] +1;
}

Nur wie oben schon gesagt, habe ich keine ahnung wie ich dem Script sagen soll, das er den letzten eintrag SELECTEN soll.

Eigentlich ist das ja kein problem da das Forum ja geht stört mich halt nur ein wenig.
 
Du musst mittels SELECT die höchste vorhandene ID auslesen und diese um 1 inkrementieren:

Code:
SELECT MAX(id)+1 AS neue_id FROM tablle;
 
Also damit ich alles richtig mache frage ich vorher lieber mal ^^

das muss jetzt dan so aus sehen oder

PHP:
SELECT MAX(cid)+1 AS cid FROM vcat;
 
Ob das richtig ist, kann ich nicht beurteilen, denn ich keine deine Tabellenstruktur nicht. Aber ich es sag es mal so: Liefert der SELECT über phpMyAdmin das richtige Ergebnis? Wenn ja, dann wird es wohl richtig sein.

Dennoch wäre es sinnvoll, die ID als Primärschlüssel und mit dem Attribut AUTO_INCREMENT zu erstellen. Bei einem INSERT ist es dann nicht mehr notwendig, einen Wert für "cid" zu vergeben, das macht MySQL allein und korrekt. Man spricht dabei von einer sog. Sequenz.
 
Kenne AUTO_INCREMENT doch habe ich die Tabelle für das Forum mit hilfe eines Tutorials gemacht, und habe da jetzt einmal id und cid stehen und kann cid nicht zu einen Primarschlüssel machen.
 
Und was ist "cid" in diesem speziellen Fall? Muss ja eine Bedeutung haben. Vermutlich ist es ein sog. Fremdschlüssel, der auf die ID einer anderen Tabelle zeigt?

Wenn ja, dann ist das auch die falsche Herangehensweise. Zuerst wird dann ein neuer Datensatz in der zweiten Tabelle angelegt. Dieser neue Datensatz liefert dann ebenfalls eine neue ID zurück und diese muss dann in der ersten Tabelle eingetragen werden.

Aber vielleicht irre ich mich ja :-)
 
Ich denke mal, cid verweist auf die übergeordnete Kategorie der gleichen Tabelle.
Wenn das so ist, dann brauchst du dort keinen Wert eintragen (NULL) oder eine 1. Du musst nur einen Wert für die Root-Foren definieren.
 
Versuche es mal besser zu erklähren wie ich mir das vorgestellt habe.

Also als erstes erstelle ich im Admin Bereich fürs Forum eine Kategorie, nennen wir sie Kat 1 diese bekommt von der Datenbank eine Id zu gewiesen und soll eine cid bekommen also in dem fall cid 1.

So jetzt erstelle ich einen Kategoriepunkt, nennen wir ihn Katp 1 dieser soll die cid 1 bekommen.
Jetzt erstelle ich eine weitere Kategorie also Kat2, diese soll die cid 2 bekommen und wenn ich jetzt einem Kategoriepunkt sage er soll Kat2 angeordnet werden, bekommt dieser logischer weiße auch die cid 2 bekommen.

Nur da muss ich ja beim erstellen der Kategorie erst einmal ermitteln, ob es schon eine Kategorie mit der cid 1 gibt, wenn ja soll er der neuen Kategorie die cid 2 geben und da habe weiß ich nicht wie ich das anstelle.

Hier einmal eine leichtere version.

Kat1 -> cid 1
Katp -> cid 1
Kat2 -> cid 2
Katp -> cid 2

Und deswegen würde ich gerne beim erstellen der Kategorie erst einmal dem Script sagen er soll überprüfen was die letzte cid ist und diese dan +1 nehmen bevor er die Kategorie speichert.

Hier mal der link zum Forum vielleicht versteht man es so eher was ich vor habe.

http://blackbox100.square7.ch/website/index.php?page=forum
 
Zuletzt bearbeitet:
Erklär doch mal am besten Anhand deines Testforums die IDs. Weil ich verstehe es immer noch nicht ganz :)
 
Ich habs verstanden. Ist auch die richtige Herangehensweise.

Er hat z.B. drei Kategorien

- Kategorie1
- Kategorie2
- Kategorie3

Diese haben jeweils die ID 1, 2 oder 3. (Aufsteigend, mehr Kategorien -> höhere IDs)

- Kategorie1: ID = 1
- Kategorie2: ID = 2
- Kategorie3: ID = 3

Wenn diese Kategorien praktisch Unterkategorien (in diesem Fall eben Kategoriepunkte) bekommen, so brauchen diese - zur eindeutigen Zuordnung - ebenfalls irgendwo die Information, zu welcher Kategorie sie gehören. Die Kategorie-ID kommt ins Spiel!

- Kategorie1: ID = 1
--- Unterkategorie1: ID = 4, KatID = 1
--- Unterkategorie2: ID = 5, KatID = 1
--- Unterkategorie3: ID = 6, KatID = 1
- Kategorie2: ID = 2
--- Unterkategorie1: ID = 7, KatID = 2
--- Unterkategorie2: ID = 8, KatID = 2
- Kategorie3: ID = 3
--- Unterkategorie1: ID = 9, KatID = 3
--- Unterkategorie2: ID = 10, KatID = 3

So wie du es umsetzen möchtest, würde ich dir empfehlen, dass Kategorien die keine Überkategorie haben (also die direkt im Foren-root liegen), z.B. die KatID = 0 bekommen.

Du kannst die entsprechende Tabelle so aufbauen:
ID (PK und A_I) -- catID -- name

catID = KatID von meinem Beispiel...

Die ID wird automatisch gesetzt. Wenn du eine root-Kategorie erstellst, setzt du die catID = 0. Erstellst du eine abhängige Kategorie (also eine untergeordnete), so nimmst du die übergeordnete ID als catID. (siehe Beispiel)

Theoretisch kannst du so 100e Ebenen an Kategorien in eine Tabelle schreiben...

lg, Lime

PS: die Unterkategorien haben in meinem Beispiel die IDs 4-10, weil 1-3 für die Oberkategorien aufgebraucht sind!
 
Zurück