MYSQL: Dostu URL'ler sql sorgusu

3 Cevap php

Ben yeni bir video girişi benim db mevcut değildir ben yapıyorum o URL'yi kontrol edebilirsiniz hangi kullanarak bir sorgu yapmak istiyorum.

Benim geçerli sorgu:

SELECT Count(videoid) FROM video WHERE titleurl = 'test';

Ben bir değişken sayısını saklamak am $n Sonra şu PHP kodu kullanarak bu denetimi

if ($n > 0){
	return $output . "-$n";
}else{
	return $output;
}

Ama sorgu üzerinde bir sorun yaratıyor. Zannetmek

  • 1 kullanıcı adı ile bir video teslim Test bu yüzden url http://example.com/video/test/ olacak
  • 2. kullanıcı adı Test ile bir video teslim yüzden TitleUrl ile bir girdi test zaten mevcut olduğundan url http://example.com/video/test-1/ olacak, bu yüzden ben de 1 eklediğiniz olacak test-1
  • 3 kullanıcı da adı test ile bir video girişi eklendi ama bu sefer benim yöntem url accoridng yanlış olan test-1 olacaktır.

test daha sonra olması test-1 ve isim testi ile bir girdisi oluştururken başka bir kullanıcı daha sonra url olmalıdır eğer test-2 gerektiğini zaten mevcut olup olmadığını, bu sorunu çözmek istiyoruz Test ve test-1 zaten orada çünkü.

Ben bu sorunu çözebilir hangi ile bazı yöntem verin.

3 Cevap

dostu URL'ler güzel, ama her zaman yanı sıra nesneler id eklemek, ya da veritabanında benzersiz bir dize saklamak gerekir. Örneğin, burada stackoverflow üzerinde adresler kontrol edin.

EDIT I seriously doubt that google is ok with short numbers but dislikes long numbers. Here is a solution using numbers only where you must: Add another column holding the 'id' value of each test-video and create a unique index on that and titleurl:

ALTER TABLE video ADD COLUMN titleurl_id UNSIGNED TINYINT NOT NULL;
CREATE UNIQUE INDEX uidx_url ON video (titleurl, titleurl_id);

Bir video oluştururken, bu değer eklemeniz gerekir:

$amount = query("SELECT COUNT(*) FROM video WHERE titleurl='test'");
query("INSERT INTO video(titleurl, titleurl_id) VALUES ('test', $amount + 1)");

Eğer bu şekilde (kimlikleri url daha uygundur neden olduğunu) yaparsanız size insert sorgusu sonucu dikkat etmek gerekir, sen yarış koşullarında çalışabilir. Bir URL oluşturma:

$urlpart = query("
    SELECT IF(
        titleurl_id = 0,
        titleurl,
        CONCAT_WS('-', titleurl, titleurl_id)
    ) AS url FROM video");

Benim ilk fikir ... WHERE url LIKE 'test%' testi ile başlayan bütün adresler seçin ve test varsa o zaman kontrol etmektir - evet, (-1 ekleyip tekrar eğer {[kontrol 3)]} bulunmaktadır. Eğer evet ise, counter artırmak -2 ..

Orijinal url için bir, ve 'hesaplanan' url için bir - iki alanları oluşturmayı deneyin.

$c = SELECT COUNT(*) FROM table WHERE original_url = 'test'
UPDATE table SET url='test-$c' WHERE id=...