На многих сайтах знакомств есть такой сервис "поднять анкету"... Не могу сообразить как логически и правильно его сделать. У меня есть таблица anketa с пользователями, у каждого есть id, который трогать (обновлять) для этой цели нельзя... я создал дополнительное поле id_up, который планировал обновлять при поднятии анкеты. (т.е. находить самое большое значение, прибавлять 1), а потом в резулататах поиска ORDER BY id_up... как то так. соответственно при регистрации новой анкеты такая же процедура. В этом случае не знаю как тогда вывести на каком месте находится конкретная анкета!? Кто что подскажет?
у тебя есть дата регистрации анкеты и "дата поднятия" При выводе сортируй по дате поднятия. Номер по порядку в запросе и будет "на каком месте". Нажимаешь на "поднять" и "дата поднятия" становится текущей. Дате формируй time() Или тебе нужно поднять на "чуть-чуть", т.е. не выше одной, но не ниже второй?
Теперь понял, в принципе почти такая же система как я писал изначально... чуть проще. Gold Dragon подскажи как вытащить из запроса номер по порядку?
ну ты же получаешь список отсортированный по "дате поднятия", и будешь получать в массив, а значит при обработке массива и сможешь получать номер по порядку.
Gold Dragon, в том то и загвоздка у меня... это если выводить в цикле, можно пронумеровать... а мне нужно показать пользователю на каком месте его КОНКРЕТНАЯ анкета!?
ну как вариант: получить "дату поднятия" анкеты конкретного пользователя. Потом получить сколько записей у которых "дата поднятия" (не думаю что попадутся одинаковые time(), а если и так, то это очень маленький процент) меньше или ранво "даты поднятия" пользователя. Вот это число и будет "местом" Добавлено спустя 40 секунд: два запроса конечно делать, но при правильном построении индексов будет быстро, да и достаточно просто Добавлено спустя 5 минут 20 секунд: ps вернее больше и равно
можно попробовать, хотя я думаю что должны быть варианты полегче... что такое индексы, как их правильно построить?)
Вот маленький примерчик накидал Допустим есть таблица Код (Text): CREATE TABLE IF NOT EXISTS `qqq` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL DEFAULT '', `data_reg` int(10) NOT NULL DEFAULT '0', `data_up` int(10) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `data_reg` (`data_reg`) ) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; Забиваем тестовыми данными Код (Text): INSERT INTO `qqq` (`id`, `name`, `data_reg`, `data_up`) VALUES (1, 'Кто-то 1', 1349244791, 1349244791), (2, 'Кто-то 2', 1349244792, 1349244792), (3, 'Кто-то 3', 1349244793, 1349244795), (4, 'Кто-то 4', 1349244794, 1349244794), (5, 'Кто-то 5', 1349244795, 1349244795), (6, 'Кто-то 6', 1349244796, 1349244796), (7, 'Кто-то 7', 1349244797, 1349244797), (8, 'Кто-то 8', 1349244798, 1349244793); И видим что запись ID=8 немного "подняли" И теперь два маленьких, но очень простых и очень быстрых запроса. Получаем "дату поднятия" Код (Text): SELECT `data_reg` FROM `qqq` WHERE `id` = 8; Получаем "место под солнцем" Код (Text): SELECT COUNT(*) FROM `qqq` WHERE `data_up` >= 1349244793 Результат: 6 Куда ещё легче и проще А вот по индексам это не два предложения.. Нужно почитать что-то более объёмное и серьёзное. Но чтобы представить что это такое на самом простом уровне, вот нашёл маленькую статейку, но достаточно понятно написанную http://www.warayg.narod.ru/context/bd/MySQL/4.htm
ну это через чур Так не бывает... и даже если получится такое что 10 человек одновременно нажмут, то получатся что они все вместе на одном месте. Т.е. каждый из 10 человек или на первом месте или каждый из них на 10-м )))