Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

tạo tiêu đề trang duy nhất slugs php

Chỉ cần đánh cơ sở dữ liệu một lần, lấy mọi thứ cùng một lúc, rất có thể đó là nút thắt cổ chai lớn nhất.

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

Sau đó, đặt kết quả của bạn vào một mảng (giả sử $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;
}

Chúng tôi sử dụng in_array() kiểm tra xem slug có phải là my-slug không LIKE cũng sẽ trả về các hàng chẳng hạn như

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

vv mà sẽ gây ra sự cố, in_array() kiểm tra đảm bảo rằng chúng tôi chỉ đang kiểm tra chính xác slug đã được nhập.

Tại sao chúng ta không đếm kết quả và +1?

Điều này là do nếu bạn có nhiều kết quả và đã xóa một vài kết quả, thì slug tiếp theo của bạn cũng có thể xung đột.

Ví dụ:

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

Xóa -3 và -5 để lại cho chúng tôi

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

Vì vậy, cho chúng ta 3 kết quả, lần chèn tiếp theo sẽ là my-slug-4 đã tồn tại.

Tại sao chúng ta không sử dụng ORDER BYLIMIT 1 ?

Chúng tôi không thể chỉ thực hiện một order by trong truy vấn vì sắp xếp tự nhiên sẽ tạo ra my-slug-10 xếp hạng thấp hơn my-slug-4 vì nó so sánh từng ký tự và 4 cao hơn 1

Ví dụ:

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. làm thế nào để tạo trường được tính toán trong mysql?

  2. MySQL concat () để tạo tên cột được sử dụng trong một truy vấn?

  3. Cách sao chép bảng từ một bảng trên máy chủ từ xa sang bảng trên một db mysql5.6 từ xa khác với PDO

  4. Cách trả lại id trên Phụ trang với mybatis trong mysql với chú thích

  5. wildfly đăng ký mysql làm nguồn dữ liệu