Mysql
 sql >> база данни >  >> RDS >> Mysql

създаване на уникални заглавия на страница охлюви php

Просто натиснете базата данни веднъж, вземете всичко наведнъж, има вероятност това да е най-голямата пречка.

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

След това поставете резултатите си в масив (да кажем $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;
}

Използваме in_array() проверява, сякаш охлювът е my-slug LIKE също така ще върне редове като

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

и т.н., което би причинило проблеми, in_array() проверките гарантират, че проверяваме само точното въведено поле.

Защо просто не преброим резултатите и +1?

Това е така, защото ако сте имали няколко резултата и сте изтрили няколко, следващият ви гол би могъл да е в конфликт.

Напр.

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

Изтриването на -3 и -5 ни оставя с

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

Така че, това ни дава 3 резултата, следващото вмъкване ще бъде my-slug-4 която вече съществува.

Защо просто не използваме ORDER BY и LIMIT 1 ?

Не можем просто да направим order by в заявката, защото естественото сортиране би направило my-slug-10 ранг по-нисък от my-slug-4 тъй като сравнява символ по знак и 4 е по-високо от 1

Напр.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. използване на виртуални полета за сумиране на стойности в cakephp

  2. Избиране на редове от една таблица с помощта на стойности, получени от друга таблица MYSQL

  3. Rails 2.3.3 - Настройка на производствен режим

  4. Използвайте две таблици в една php страница (mysql)

  5. Не може да се мигрира с помощта на ModelState и ProjectState с помощта на API за миграции в Django 3.0.3