Kullanıcıların 'in diğer kullanıcıların "iyiliğini" derecelendirebileceği bir PHP betiğini programlamaya çalışıyorum:PostgresQL: Bir IPv4 adresinin ilk 3 sayısının karşılaştırılması?
create table pref_rep (
id varchar(32) references pref_users(id) check (id <> author),
author varchar(32) references pref_users(id),
author_ip inet,
good boolean,
last_rated timestamp default current_timestamp
);
Kurcalamayı engellemek (xtx13) girişlerini silmek istiyorum son bir saat içinde aynı IP'den gelen aynı kimlik
(proxy/yönlendiriciler nedeniyle ara sıra yanlış pozitifler iyidir - çünkü yazar daha sonra tekrar gönderebileceği için bir derecelendirmeyi kaybetmek iyidir ; ama farklı id altında kayıtlı bazı aptallar ve web sitemden uzaktayken veritabanımın tamamını bozmak iyi değil:
/* _author_ip will be $_SERVER['REMOTE_ADDR'] */
create or replace function pref_update_rep(_id varchar,
_author varchar, _author_ip inet,
_good boolean) returns void as $BODY$
begin
delete from pref_rep
where id = _id and
author_ip = _author_ip and
age(to_timestamp(last_rated)) < interval '1 hour';
update pref_rep set
author = _author,
author_ip = _author_ip,
good = _good,
last_rated = current_timestamp
where id = _id and author = _author;
if not found then
insert into pref_rep(id, author, author_ip, good)
values (_id, _author, _author_ip, _good);
end if;
end;
$BODY$ language plpgsql;
2 soru var lütfen:
1) 4 yerine 'in ilk 3 sayısını karşılaştırmak istiyorum, bunu nasıl yapabilirim? (Evet, A, B, C tipi IPv4 ağlarının türlerini biliyorum, burada önemi yok ...)
2) tablosuna bir indeks eklemem gerekir mi yoksa id ve yazar zaten dizine eklenmiş mi?
Teşekkürler! Alex