Ik wil unieke url's creeeren in mijn database mbt SEO.

Als ik een nieuwe topic aanmaak wil ik controleren of de titel al in de database bestaat en als deze bestaat, uniek maken met een getal, eigenlijk alla wordpress.

Voorbeeld wat ik op wil slaan:
"dit-is-een-titel"

Wanneer deze titel bestaat wil ik van deze titel maken:

"dit-is-een-titel-1"

En wanneer deze al bestaat:

"dit-is-een-titel-2"

Kan iemand mij een voorbeeld geven hoe ik zoiets in elkaar programmeer?
Je kan toch bij het aanmaken bij een nieuw menu item controleren of de naam al bestaat en dan vragen of de gebruiker een andere naam in wilt voeren omdat deze al bestaat?!


select naam from menu where naam = $_POST['invoer']
Ik zou een COUNT query uitvoeren voordat de titel geinsert wordt. Het resultaat van die query is het nummer dat je toevoegt achter de titel. Tenzij het er 0 zijn uiteraard ;)
En volgens mij heeft SQL ook nog UNIQUE en DISINCT (?) om te zorgen dat iets uniek is.
Een UNIQUE constraint zorgt ervoor dat een waarde maar eenmalig mag voorkomen binnen die kolom(men). DISTINCT laat alleen unieke resultaten zien bij een SELECT binnen die kolom(men).

Wat Arjen wil is titels nummeren zodat ze uniek blijven als ze al eerder zijn ingevoerd. Dat kan je niet met UNIQUE/DISTINCT.
@ Jurgen: helemaal goed, denk niet zo makkelijk:

Marco PHPJunky op 10/05/2012 23:31:44

Je kan toch bij het aanmaken bij een nieuw menu item controleren of de naam al bestaat en dan vragen of de gebruiker een andere naam in wilt voeren omdat deze al bestaat?!


select naam from menu where naam = $_POST['invoer']



De optie van een count is een goeie, wat denk ik wel werk.

Heb je een script voorbeeld?

Terwijl ik het voorbeeld maakte bedacht ik me dat je ook gewoon een SELECT title kan doen en mysql_num_rows kan gebruiken in plaats van de COUNT() methode.
<?php
$result = mysql_query('
    SELECT id
    FROM articles
    WHERE title = "' . mysql_real_escape_string($_POST['title']) . '"'
);

if ($result === false) {
    echo 'De query is mislukt: ' . mysql_error();
} elseif (mysql_num_rows($result) > 0) {
    /* De titel komt al voor, voeg het nummer toe 
    Ik ga er vanuit dat je een functie hebt die 
    dashed dus ik voeg alleen een spatie in voor het nummer */
    $_POST['title'] .= ' ' . $mysql_num_rows($result);
}

/* Query die $_POST['title'] in database invoert */
?>
COUNT is sneller
<?php
$result = mysql_query('
SELECT COUNT(id) AS aantal
FROM articles
WHERE title = "' . mysql_real_escape_string($_POST['title']) . '"'
);

if ($result === false) {
echo 'De query is mislukt: ' . mysql_error();
} elseif ($aantal = mysql_fetch_assoc($result)['aantal'] != 0) {
/* De titel komt al voor, voeg het nummer toe
Ik ga er vanuit dat je een functie hebt die
dashed dus ik voeg alleen een spatie in voor het nummer */
$_POST['title'] .= ' ' . $aantal++;
}

/* Query die $_POST['title'] in database invoert */
?>
Over snelheid had ik nog niet echt nagedacht. In dat geval COUNT() gebruiken, maar dan niet $aantal++ want als er bijv. al een rij bestaat returned hij een 1. Dat is ook het nummer dat je wilt toevoegen achter de titel in dat geval.

Reageren