Bazı satırlar silinmiş olsa bile nasıl bir önceki ve bir sonraki satır alabilirim?

2 Cevap php

Ben bir veritabanında sonraki ve önceki satırları belirlemek aşağıdaki PHP fonksiyonları var. Satırlar silinebilir Ancak, vesilelerle bir sürü vardır ve yaptıkları tüm auto_increment alanını azaltma gibi bu nedenle benim fonksiyonları çalışmaz.

. Örneğin, geçerli satır 5 Benim fonksiyon verir: (bir sonraki) 4 (önceki) ve 6. Ne 6 ve 7 silinirse. Benim iyi fikir ben bir satır elde edene kadar sorgulama devam etmektir, ancak bu verimsiz gibi görünüyor, daha iyi bir yolu var mı?

Tüm teşekkürler

//function to get next tweet
function getNextTweet($key, $direction){

$sql = "SELECT tweet_id FROM tweets WHERE tweet_key = '$key' LIMIT 1";

$result = mysql_query($sql) or die("DB Error : ". mysql_error());

$result = mysql_fetch_assoc($result);

if($direction=='next'){

	$tweet_id = $result['tweet_id'] + 1;

}else{

	$tweet_id = $result['tweet_id'] - 1;

}

$sql = "SELECT * FROM tweets WHERE tweet_id = '$tweet_id' LIMIT 1";

$result = mysql_query($sql) or die("DB Error : ". mysql_error());	

return mysql_fetch_assoc($result);

}

2 Cevap

Eğer bajillion kayıtları yok varsayarak ...

Önceki:

SELECT * 
FROM table 
WHERE (id < currentID) 
ORDER BY id DESC 
LIMIT 1

Sonraki

SELECT * 
FROM table 
WHERE (id > currentID) 
ORDER BY id ASC 
LIMIT 1

Eğer MySQL modern bir sürümünü çalıştırıyorsanız, sizin fonksiyonu içine kolaylaştırabilirsiniz

function getNextTweet($key, $direction)
{
    $cmp   = ($direction == 'next') ? '>' : '<';
    $order = ($direction == 'next') ? 'ASC' : 'DESC';

    $sql = "SELECT *
              FROM tweets
             WHERE tweet_id $cmp (SELECT tweet_id FROM tweets WHERE tweet_key = '$key' LIMIT 1)
          ORDER BY tweet_id $order
             LIMIT 1";

    $result = mysql_query($sql) or die("DB Error : ". mysql_error());       

    return mysql_fetch_assoc($result);
}

Sürece "tweet_id" endeksli olarak, sorgu kayıtları bile milyonlarca, çok hızlı olacaktır.

Son bir şey, make sure that $key is properly validated! Aksi halde, herkes sorguya SQL enjekte edebilir, bu büyük bir güvenlik açığı bulunuyor. $key bir diyez ama bir şey ise, o at least mysql_real_escape_string() geçmesi gerekir