INSERT INTO skal være unik

Hvis jeg setter inn data fra et skjemafelt til en database så må dataen som lagres bli unik.

Hvis jeg forsøker å legge inn “kylling” så går dette bra den første gangen, mens neste gang så må det lagres som “kylling-2” og deretter “kylling-3” osv.

Hvordan gjøres dette med php/mysql?

DBMSen er ikke så smart, meg bekjent, så du ville måtte skrive litt kode for å få det til. Jeg ville kikket på WordPress sin kildekode; der ligger det en plass.

Hvorfor må det gjøres på denne måten? Kan du sende litt mer detaljer, gjerne litt kode, så kanskje noen hjelper til med en løsning som er bedre enn det du har tenkt på :slight_smile:

I filen:
wp-includes/formatting.php

funksjon:
sanitize_title_with_dashes($title) { … }

Dersom du ikke bruker Word Press og tenker å gjøre dette med regn PHP. vil jeg anbefale deg noe sånt som dette.

Sjekk først om det allerede eksisterer en rad i din DB med verdien “Kylling”.

Kjør så igjennom en IF statment der du gir to mulig utvalg.

IF(Det er allerede kylling i dB){
Dersom det er “Kylling” i din DB, tar du å legger til +1 på verdien brukeren har skrevet til.

letteste måten er vell rett og sett og lagre verdien i en ny variable der du legger itl +1.

$item = $item . 1;

så kjører du denne variablen inn i din DB.

}ELSE{
INSERT INTO DB på vanlig måte.
}

Det er nok ikke fullt så enkelt fordi det vil forårsake records som dette:

Kylling
Kylling1
Kylling11
Kylling111

@Quicktech.

Helt korrekt til vil bli som du har skrevet over. Men det var det enkleste jeg kom på i farta. Ikke helt opptimalt, men man får hvertfall unike verdier:)

Beste er vell å sjekke om det allerede står et tall bak “Kylling”, og deretter + på 1 til det tallet som allerede står der. Da vil man få

Kylling
Kylling1
Kylling2
osv.

Beste måten å gjøre dette på er vell å hente ut siste bokstav eller tall fra DB spørringen.

Bruk f.eks $checkString = substr(“Kylling”, -1); // Dette vil gi $checkStrin verdi g.
Deretter kan du jo sette opp en IF statment som sjekker at dersom $checkString returnerer en bokstav legger man til kun 1. Dersom $checkString returnerer et tall tar man dette tallet og plusser på 1. :wink:

Ser at referansen til WP’s bibliotek ikke var helt rett, så jeg prøvde litt.
Hvis du foretar

SELECT perma FROM tab WHERE perma REGEXP "^<dintittel>([-][0-9])?$" ORDER BY perma DESC

så får du en liste med permalenker.

Hvis den første i listen er likt din tittel, men med ‘-’ bak, så må du øke dette nummeret; (int) str_replace( ‘din tittel’+‘-’, ‘’ ) gir deg dette nummeret.

Tror jeg.

Her var det mange gode forslag. Takk skal dere ha :slight_smile:

Tror kanskje jeg skal teste ut Wordpress sin kodesnutt først.