Принцип на снимките в сайтовете за запознанства

Mp3Fun

Registered
Може ли да ме ориентирате на какъв принцип са снимките в сайтовете за запознанства, как като цъкна на едната да показва следващата.
Примерно.. за потребител "admin" е качил снимки, и те са се записали в базата данни с ID 1,5,8;
Как като разглеждам примерно снимка с ID 1 като цъкна на нея да ме прехварли на снимка с ID 5 и от 5 към 8 и от 8 към 1 :)
Дано разбрахте какво имам впредвид моля да ми помогнете спешно ми трябва :)
 
Не знам дали е така, но аз се сещам за тази заявка:
[sql]SELECT * FROM `images` WHERE `user_id` = '$user_id' AND `id` > '$image_id' ORDER BY `id` ASC LIMIT 1[/sql]
Където $image_id е id-то на настоящата снимка, а заявката връща id-то на следващата снимка на потребителя с id $user_id.

В случай, че си достигнал последната снимка и искаш при клик да връща на първата, проверяваш с mysql_num_rows() дали горната заявка връща нещо. Ако резултатът е 0, т.е. сегашната снимка е последна, тогава изпълняваш следната заявка:
[sql]SELECT * FROM `images` WHERE `user_id` = '$user_id' ORDER BY `id` ASC LIMIT 1[/sql]
 
Да но в такъв случай как да си направя базата данни, какво да сложа в полетата user_id и id
 
Mp3Fun каза:
Да но в такъв случай как да си направя базата данни
Базата-данни ще ти бъде от поне две таблици:

create table user (
id int(10) unsigned not null primary key auto_increment,
user_name varchar(50) not null unique,
user_pass varchar(32) not null,
real_name varchar(100) not null,
email_address varchar(255) not null
) engine=InnoDB;

create table photo (
id int(10) unsigned not null primary key auto_increment,
user_id int(10) unsigned not null,
file_name varchar(255) not null,
FOREIGN KEY user_id(user_id) references user(id) on delete cascade
) engine=InnoDB;

Mp3Fun каза:
какво да сложа в полетата user_id и id
1. Когато се регистрира нов потребител, информацията отива в първата таблица. От тук взимаш стойността на id, която трябва да използваш като user_id във втората таблица - това ти е релацията между потребителя и снимката.

2. Когато потребителя качи снимка/ки, информацията отива във втората таблица. Така за всеки потребител може да имаш неограничен брой (или колкото им разрешиш) снимки. От тук взимаш id, което е номера на снимката.

3. Дадения по-горе пример използва InnoDB вместо MyISAM като "тип" на базата-данни, което ознава, че ако изтриеш даден потребител, всички записи от втората таблица, които са асоциирани с този потребител също ще бъдат изтрити. Но не и файловете! Затова като изтриваш потребител, първо правиш една заява да му вземеш снимките, които да изтриеш физически от сървъра, и след това втора заявка - с която изтриваш потребителя от първата таблица, записите от втората таблица ще се изтрият автоматично.
 
Добре ето го сайта,, http://87.120.244.253/
Проблема е в http://87.120.244.253/user.php?p=photo&id=9 примерно как да направя като кликна върхо снимката да показва следващата снимка от този потребител.
Всичко е направено както казваш. С 2 таблици съм, то така или иначе няма начин...
Жалко че не може да ме разберете какво искам да направя.. :S:X
 
Има два варианта - ако не искаш страницата да се презарежда или ако не ти е проблем да се презарежда.

1. Взимаш всички снимки на потребителя. Правиш Javascript масив, показваш първата, скриваш останалите. При клик върху снимката, скриваш текущата и показваш следващата. Може дори да използваш някой image slider като nivoslider.

2. Втори вариант. Взимаш първата снимка, показваш я, слагаш линк от долу "следваща снимка", нещо от вида

http://87.120.244.253/user.php?p=photo&id=9&current_photo=314

Когато потребителя кликне на този линк, ще трябва да покажеш коя е следващата снимка, ако има такава

select * from photo where user_id = 9 and id > 314 order by id limit 1

ако ти върне празен резултат, показваш пак първата. Варианта с javascript е по-добър.
 
Това с JavaScript, да взема всичките снимки и да ги скрива, да показва едната ще бави. Представи си ако има 100 снимки и зареди 100-те и ги скрие и покаже едната. Един Ajax request с заявката от първия отговор е ОК.
 
Мисля че ще успея да го направя, може ли да ми помогните с това, на крачка съм от успеха.

Код:
$sqlquery = "SELECT * from photos WHERE user='$r[user]' AND id<>'$r[id]' order by id";
$queryresult = mysql_query($sqlquery)
or die ("Заявката не може да се изпълни");
//показване на данните от базата данни
while ($roe = mysql_fetch_array($queryresult))
{
$pic = $roe[id];
}
Този скрипт вади това:
16
17
18
19
20
21
22
23
24
25
Като сложа лимит вади само 25, как да направя да не вади последното, а примерно едно преди него :)
С лимит 2 ми ги вади и 2те, а ми трябва само едното и то нито да е 16, нито 25, тоест и да сменя променливата asc, desc това не ми стига. Трябва това което извежда вмомента аз да взема една стойност преди нея :)
 
PHP:
$sqlquery = "SELECT * from photos WHERE user='$r[user]' AND id<>'$r[id]' order by id";
Не е много добра идея да използваш <> (по-малко/по-голямо от), защото много е вероятно да се получат повторения. Например сега си на снимка 20, при следващата заявка ще търсиш снимка различна от 20 и ще получиш например 21, после ще търсиш различно от 21 и може пак да получиш 20. Затова трябва да ги подредиш и лимитираш. Още повече ако искаш само един резултат, тогава няма нужда да минаваш през цикъл.

PHP:
$sqlquery = "SELECT * from photos WHERE user='$r[user]' AND id > '$r[id]' order by id limit 1"; 
$queryresult = mysql_query($sqlquery) or die ("Заявката не може да се изпълни");
$photo = mysql_fetch_array($queryresult);
Така винаги ще получаваш следващата снимка. Но след последната снимка, ще получиш празен масив $photo и тогава трябва да се върнеш на първата:

PHP:
$sqlquery = "SELECT * from photos WHERE user='$r[user]' order by id limit 1";
 

Back
Горе