|
|
|
| Как можно узнать текущую позицию определеной записи и реализовать возможность поднятия записи вверх остальных?
На многих сайтах есть опции - поднять анкету вверх, поднять вакансию вверх...
Мой вариант: использовать поле position, при инсерте новой записи и поднятия вверх равнять с SELECT COUNT(), потом вычитывать позицию из position - \"SELECT COUNT()\". В случае удаления записей, пересчитывать все position.
Может есть более оптимальные решения? | |
|
|
|
|
|
|
|
для: ardolix
(14.03.2008 в 14:37)
| | Предлагаю, как вариант, вместо поля position ввести поле time_pos (например).
По добавлению новой записи в это поле вставлять текущее время.
При "поднятии записи вверх остальных" перезаписывать время. | |
|
|
|
|
|
|
|
для: olejek
(14.03.2008 в 15:30)
| | Отличная идея для второй части задачи. Однако, остаёться первая - необходимо отобржать (причём очень часто) - текущую позицию (ваша анкета/вакансия занимает ... место). | |
|
|
|
|
|
|
|
для: Ardolix
(14.03.2008 в 16:02)
| | Например:
<?
/*
name time_pos
Иванов 2008-03-14 15:46:52
Петров 2008-03-14 15:47:03
Сидоров 2008-03-14 15:47:23
Кузнецов 2008-03-14 15:47:32*/
$i=1;
$query=mysql_query("select * from table order by time_pos") or die (mysql_error());
while ($qr = mysql_fetch_array($query))
{
echo $qr['name']." - Ваша позиция - $i";
$i++;
}
?>
|
| |
|
|
|
|
|
|
|
для: olejek
(14.03.2008 в 16:38)
| | ну если через скрипт довавьте
$i = 0;
while ($qr = mysql_fetch_array($query))
{
echo $qr['name']." - Ваша позиция - ".$i++;
$i++;
}
|
| |
|
|
|
|
|
|
|
для: KirillKiev
(14.03.2008 в 16:40)
| | Ух, ты, KirillKiev! Мы с вами мыслим почти одинаково! Только зачем же два раза $i++? | |
|
|
|
|
|
|
|
для: olejek
(14.03.2008 в 16:43)
| | не заметил сори | |
|
|
|
|
|
|
|
для: olejek
(14.03.2008 в 16:38)
| | В вашем случае, конечно, отличное решение. Дело в том, что оно не отображаеться списком всех пользоаателей, а для каждого в частности. Для этого, пересчитывать при каждом отображении (обычно это на каждой странице, что достаточно часто), дало бы высокую нагрузку. | |
|
|
|
|
|
|
|
для: Ardolix
(14.03.2008 в 16:48)
| | Ну, тогда остается тот вариант, который Вы описали сначала. Хотя он какой-то кривой.
Может, кто еще что-нибудь придумает. | |
|
|
|
|
|
|
|
для: olejek
(14.03.2008 в 16:55)
| | Хех
тока что обнаружил еще один вариант, правда непроверял в php а напрямую в мускуле
использование переменных мускула
пример
set @x=0;
select
(@x:=@x+1) as n,
`countryId`
from
`BidsActiv`
group by countryId
having countryId = 4
|
тогда иду соответствующему в данном случае 4 будет соответствовать номер 3
ну в моей таблице
http://www.weblibrary.biz/mysql/struktura/peremennye | |
|
|
|
|
|
|
|
для: KirillKiev
(14.03.2008 в 17:04)
| | А если эта миллионая позиция, то как поступить? | |
|
|
|
|
|
|
|
для: Ardolix
(14.03.2008 в 17:23)
| | незнаю... что будет в данном случае у меня 150000 строк обрабатывало 4 секунды
не... все таки эта лажа нужно еще искать с нумерацией строк
у меня просто ощущение, что не существует в мускуле нумерации строк вне определенного набора
а набор нужно выполнить весь, что бы получить данную нумерацию
может кто то еще чего посоветует | |
|
|
|
|
|
|
|
для: KirillKiev
(14.03.2008 в 17:32)
| | 4 секунды это очень много.
Просто многие это используют. Навярняка есть оптимальное решение. К примеру loveplanet - 9,634,061 анкет. каждому авторизированому пользователю всегда показывается какую позицию он в поиске занимает. Причём даже и на всём сайте и в городе. Та же фитча и на мамбе и 24open. | |
|
|
|
|
|
|
|
для: ardolix
(14.03.2008 в 14:37)
| | Спасибо всем!
В первой части задачи использовал идею olejek, а вторую:
SELECT count(*)
FROM ANKETS a
WHERE a.anket_type = @USER_ANKET_TYPE a.update_time > @USER_UPDATE_TIME;
|
| |
|
|
|