Primärschlüssel auf 2 Feldern verteilen

Fruitgum

Erfahrenes Mitglied
Hallo,

meine Tabelle:

CREATE TABLE `navi_head` (
`navi2_id`INT NOT NULL AUTO_INCREMENT ,
`navi2_name` TEXT NOT NULL ,
`navi2_name_title` TEXT NOT NULL ,
`navi2_name_rank` integer NOT NULL ,
primary key(navi2_id))


So lege ich ein neuen Eintrag an:
Code:
$query = "INSERT INTO navi_head SET navi2_name='$navi_name', navi2_name_title='$navi_name_title', navi2_name_rank='?'";


Wie kann ich es nun schaffen, das der Primärschlüssel, der automatisch vergeben wird sich auch in navi2_name_rank einträgt?


Grüße
 
Du willst dieselbe Information in zwei verschiedenen Spalten speichern? So etwas tut man nicht, es verletzt die dritte Normalform. Wenn du aber trotzdem glaubst, so etwas zu brauchen, dann solltest du die Spalte 'navi2_name_rank' aus der Tabelle löschen und eine entsprechende Sicht (View) anlegen; dort kannst du mehrere Spalten für die Bereitstellung der Id anlegen.
 
mmm, ja ich wollte nur das der rank erstmal anfangs die selbezahl wie die ID bekommt. Habe aber jetzt das so, das eine Null vergeben wird und ich im nachhinein den rank bestimme. der Rank ist nur zum sotieren da...
 
Code:
CREATE TABLE `navi_head` (
`navi2_id`INT NOT NULL AUTO_INCREMENT ,
`navi2_name` TEXT NOT NULL ,
`navi2_name_title` TEXT NOT NULL ,
`navi2_name_rank` integer NOT NULL ,
primary key(navi2_id, navi2_name_rank))

So hast du ein Primary über 2 Felder. Es ist ein Index über 2 Felder. Das macht sinn, wenn nur die Kombination beider Felder der eindeutige Index ist.

In deinem Fall sehe ich eher Sinn, einen 2ten Index anzulegen, damit die Suche/Verknüpfungen schneller sind.

Code:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [USING index_type]
    ON tbl_name (index_col_name,...)
    [WITH PARSER parser_name]

index_col_name:
    col_name [(length)] [ASC | DESC]

In deinem Fall also
Code:
CREATE UNIQUE INDEX idx_navi2_name_rank
ON navi_head (navi2_name_rank);
 
Zurück