Помощник
|
Как определить порядковый номер записи в БД? |
B.B.
|
Сообщение
#1
|
||
|
|
||
|
|||
Mulder_hb |
16.2.2011, 23:54;
Ответить: Mulder_hb
Сообщение
#2
|
|
А зачем упорядочивать, а потом искать? Ищите сразу:
SELECT * FROM `table` WHERE `field` = 'value'; Если при этом field будет еще и индексом, то будет все замечательно. |
|
|
B.B.
|
Сообщение
#3
|
|
Видимо Вы не поняли. Вот допустим как на главной странице этого форума активные пользователи:
1 Webmaster 6,811 2 Licoric 4,169 3 MetSerp 2,670 4 alexdrob 2,520 5 Diablo 2,405 6 Apay 2,196 7 Letmetouchyou 2,172 8 Ramster 1,838 9 Exterior 1,780 10 Nightfly 1,681 Вырисовывается примерно такая БД: "Логин" "Кол-во сообщений" "ID" ну и т.д. Так вот, чтобы определить "самого печатающего" пользователя мне нужно упорядочить мою БД по "Кол-ву сообщений", а потом чтобы определить позицию определенного пользователя в этом рейтинге я перебираю отсортированную бд в цикле while и добавляю временной переменной +1, пока не найду нужного. Когда нахожу нужного, то число временной переменной это и будет № позиции данного пользователя. Возможно есть какие-то средства, чтобы обойтись без этой временной переменной и цикла?! |
|
|
alexdrob |
17.2.2011, 0:56;
Ответить: alexdrob
Сообщение
#4
|
|
set @n = 0; select `name`, @n:=@n+1 from `users` order by `name`; Так? или я чего то не понял?) |
|
|
B.B.
|
Сообщение
#5
|
|
Допустим у меня такая БД:
id name message 3 vanya 34 8 olya 76 12 zhenya 39 Меня интересует на каком месте Zhenya по количеству написанных сообщений, что я для этого делаю: 1. сортируем бд по количеству сообщений в порядке убывания. [PHP]$a = mysql_query ("SELECT * FROM table ORDER BY message DESC");[/PHP] 2. затем перебираю все эти записи в цикле while: [PHP]$chislo=1; $b = mysql_fetch_array($a); while ($b != NULL or $b[id] != 12) { $chislo = $chislo +1; $b = mysql_fetch_array($a); }[/PHP] 3. теперь переменная $chislo будет хранить номер позиции в рейтинге пользователя Zhenya. Так вот вопрос в следующем: можно ли определить номер позиции в рейтинге пользователя "Женя" без цикла? С помощью SQL? |
|
|
alexdrob |
17.2.2011, 4:09;
Ответить: alexdrob
Сообщение
#6
|
|
выполняешь код 1 раз он сохранится в базе
DELIMITER | DROP PROCEDURE IF EXISTS find| CREATE PROCEDURE find (IN v varchar(255)) BEGIN DECLARE done INT DEFAULT 0; DECLARE n INT(11) DEFAULT 0; DECLARE name VARCHAR(255); DECLARE cur CURSOR FOR SELECT `username` FROM `table` ORDER BY `message` DESC; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur; read_loop: LOOP FETCH cur INTO name; IF done THEN LEAVE read_loop; END IF; SET n = n + 1; IF name = v THEN SELECT n; LEAVE read_loop; END IF; END LOOP; CLOSE cur; END| DELIMITER ; определить позицию Женя [PHP]$pos = mysql_result(mysql_query("call find('Женя')"),0); echo "Женя на $pos месте!";[/PHP] |
|
|
Mulder_hb |
18.2.2011, 18:36;
Ответить: Mulder_hb
Сообщение
#7
|
|
Мой изврат
[PHP]<?php mysql_query("SET @n := 0"); $result = mysql_query("SELECT DISTINCT IF ((@n := @n + 1) && (`name` = 'vasya'), @n, NULL) `position` FROM `table` ORDER BY `position` DESC"); $position = mysql_result($result, 0);[/PHP] Хотя нужно смотреть всю задачу целиком. Вы будите в последствии выводить весь список пользователей? Например, первую десятку? Тогда проще сделать простой запрос и пройтись по нему циклом. [PHP]<?php $res = mysql_query("SELECT `name`, `messages` FROM `table` ORDER BY `messages` DESC"); for ($data = array(); $row = mysql_fetch_assoc($res); $data[] = $row); $name = "John"; $position = array_search(array($name), $data); $position++; echo "$name на $position месте!";[/PHP] |
|
|
B.B.
|
Сообщение
#8
|
|
выполняешь код 1 раз он сохранится в базе В Вашем примере тоже цикл. Будет ли этот код выполняться быстрее, чем мой через while? определить позицию Женя [PHP]$pos = mysql_result(mysql_query("call find('Женя')"),0); echo "Женя на $pos месте!";[/PHP] После проделанного так и не вывел он мне циферку. |
|
|
B.B.
|
Сообщение
#9
|
|
Мой изврат [PHP]<?php mysql_query("SET @n := 0"); $result = mysql_query("SELECT DISTINCT IF ((@n := @n + 1) && (`name` = 'vasya'), @n, NULL) `position` FROM `table` ORDER BY `position` DESC"); $position = mysql_result($result, 0);[/PHP] Этот пример не совсем понятен. Ведь поля position у меня нет. Только id (INT), name (varchar) и message (INT). Пробовал писать так: [PHP]mysql_query("SET @n := 0"); $result = mysql_query("SELECT DISTINCT IF ((@n := @n + 1) && (`name` = 'vasya'), @n, NULL) `message` FROM `table` ORDER BY `message` DESC"); $position = mysql_result($result, 0);[/PHP] Выводит не понятные цифры. Хотя нужно смотреть всю задачу целиком. Вы будите в последствии выводить весь список пользователей? Например, первую десятку? Тогда проще сделать простой запрос и пройтись по нему циклом. Мне нужно именно определить позицию в рейтинге определенного пользователя. |
|
|
alexdrob |
18.2.2011, 23:03;
Ответить: alexdrob
Сообщение
#10
|
|
После проделанного так и не вывел он мне циферку. Если вы просто скопировали мой код, то он врятли вам выведет, я же не знаю название полей ваших) Подгоните запросы под свою таблицу. В Вашем примере тоже цикл. Будет ли этот код выполняться быстрее, чем мой через while? Не могу сказать) Мой код выполнится в mysql а ваш в php это основная разница. могу сказать одно, нагрузки именно на пхп будет меньше, и память меньше будет на пхп израсходована, так как не будут все пользователи возвращены. |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Как в пушсетках покупают по 100-200 тысяч кликов за день? | 2 | Boymaster | 719 | 24.4.2024, 17:52 автор: Boymaster |
|
Как вы отдыхаете от работы за компом | 151 | adw-kupon.ru | 19905 | 23.4.2024, 13:52 автор: Vmir |
|
Как вы бросили работу и перешли на заработок с сайтов? | 20 | uahomka | 3483 | 23.4.2024, 11:54 автор: Skyworker |
|
Как вывести деньги в Украине с заблокированного Юмани ? | 30 | freeax | 5047 | 20.4.2024, 16:49 автор: Liudmila |
|
Арбитражники, как ведете учет расходов и доходов? | 13 | Boymaster | 2040 | 20.4.2024, 15:06 автор: Boymaster |
Текстовая версия | Сейчас: 26.4.2024, 2:35 |