sql >> Databáze >  >> RDS >> Mysql

vytvoření jedinečného názvu stránky slimáci php

Stačí jednou kliknout na databázi, chytit vše najednou, je pravděpodobné, že to je největší překážka.

$query = "SELECT * FROM $table_name WHERE  $field_name  LIKE '".$slug."%'";

Poté vložte výsledky do pole (řekněme $slugs )

//we only bother doing this if there is a conflicting slug already
if(mysqli_num_rows($result) !== 0 && in_array($slug, $slugs)){
    $max = 0;

    //keep incrementing $max until a space is found
    while(in_array( ($slug . '-' . ++$max ), $slugs) );

    //update $slug with the appendage
    $slug .= '-' . $max;
}

Používáme in_array() zkontroluje, jako by slimák byl my-slug LIKE vrátí také řádky jako

my-slug-is-awesome
my-slug-is-awesome-1
my-slug-rules

atd., což by způsobilo problémy, in_array() kontroly zajišťují, že kontrolujeme pouze přesně ten slimák, který byl zadán.

Proč prostě nezapočítáme výsledky a +1?

Je to proto, že pokud jste měli více výsledků a několik smazali, váš další slimák by mohl být v konfliktu.

Např.

my-slug
my-slug-2
my-slug-3
my-slug-4
my-slug-5

Smazat -3 a -5 nám ponechává

my-slug
my-slug-2
my-slug-4

To nám dává 3 výsledky, další vložení by bylo my-slug-4 který již existuje.

Proč prostě nepoužijeme ORDER BY a LIMIT 1 ?

Nemůžeme udělat jen order by v dotazu, protože přirozené řazení by vytvořilo my-slug-10 hodnocení nižší než my-slug-4 protože porovnává znak po znaku a 4 je vyšší než 1

Např.

m = m
y = y
- = -
s = s
l = l
u = u
g = g
- = -
4 > 1 !!!
  < 0 (But the previous number was higher, so from here onwards is not compared)


  1. Sloupec je ve výběrovém seznamu neplatný, protože není obsažen v agregační funkci ani v klauzuli GROUP BY

  2. Instalace softwaru Oracle Database 12c v systému Windows

  3. Uživatelská databáze MySQL nemá sloupce s hesly - Instalace MySQL na OSX

  4. Jak zálohovat / exportovat databázi MySQL pomocí PHP