Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как определить какая по счету строка
 
 автор: sotkom   (06.02.2009 в 16:18)   письмо автору
 
 

Подскажите, плз...
Делаю запрос на выбор из строки
$q="select * from users where login='$login' ";
$r=@mysql_query($q);

Как определить какая по счету строка этого юзера от верха таблицы mySQL?

  Ответить  
 
 автор: sim5   (06.02.2009 в 16:27)   письмо автору
 
   для: sotkom   (06.02.2009 в 16:18)
 

У таблицы нет верха, все записи внавал. Да и зачем это нужно?

  Ответить  
 
 автор: sotkom   (06.02.2009 в 16:43)   письмо автору
 
   для: sim5   (06.02.2009 в 16:27)
 

в таблице записи сортируются... а нужно для того, чтобы юзер видел на каком месте в таблице он стоит!
ньюанс еще в том, что записи периодически удаляются из любого места таблицы, но новые добавляются только в конец таблицы.

  Ответить  
 
 автор: sim5   (06.02.2009 в 16:47)   письмо автору
 
   для: sotkom   (06.02.2009 в 16:43)
 

Еще раз - куда добавляются записи, это вам не ведомо, да и не нужно. Вы можете определять номер записи, например, уникальный ID юзера. А вот на каком он месте, это уже совсем иной вопрос, здесь нужно добавить в таблицу поле, которые бы указывало порядковый номер пользователя. При удалении какой либо записи, данные имеющиее меньший номер, номера этого удаляемого поля, нужно будет уменьшать на 1. Вот это поле и будет у вас показывать то, что вам нужно.

  Ответить  
 
 автор: sotkom   (06.02.2009 в 17:07)   письмо автору
 
   для: sim5   (06.02.2009 в 16:47)
 

В том и вопрос, на каком он месте!!!
поле ID с порядковым номером есть, а вот как реализовать чтобы при удалении строки это поле опять переписывало порядковые номера по порядку?
Может отдельным скриптом каким?

  Ответить  
 
 автор: MIchail1982   (06.02.2009 в 17:16)   письмо автору
 
   для: sotkom   (06.02.2009 в 17:07)
 

не факт, что заработает(мне проверить не на чем...)
select count (user_id) from users WHERE user_id<(select user_id from users where login='$login')

  Ответить  
 
 автор: sotkom   (06.02.2009 в 17:32)   письмо автору
 
   для: MIchail1982   (06.02.2009 в 17:16)
 

спасибо, идея понятна, попробую...

  Ответить  
 
 автор: Valick   (06.02.2009 в 17:16)   письмо автору
 
   для: sotkom   (06.02.2009 в 17:07)
 

Ненужно вам это. На каком месте пользователь можно посмотреть просто отсортировав список по id и присваивая порядковый номер уже на стадии вывода.

Интересно что по этому поводу думает Trianon.

  Ответить  
 
 автор: sotkom   (06.02.2009 в 17:35)   письмо автору
 
   для: Valick   (06.02.2009 в 17:16)
 

А как присвоить порядковый номер на стадии вывода???

  Ответить  
 
 автор: Trianon   (06.02.2009 в 19:46)   письмо автору
 
   для: Valick   (06.02.2009 в 17:16)
 

А что я могу думать?
Что первичный ключ это не поле порядкового номера.
Что если хочется второе иметь именно полем - следует таковое создать независимо от первичного ключа.
Что месяца не проходит, чтобы не нашелся очередной умник, утверждающий, что ему до зарезу надо первичным ключом перенумеровывать строки, которого приходится переубеждать.
Что на поисковый запрос "внавал" сервер выдает 24 темы.

  Ответить  
 
 автор: Valick   (06.02.2009 в 20:59)   письмо автору
 
   для: Trianon   (06.02.2009 в 19:46)
 

Что месяца не проходит, чтобы не нашелся очередной умник

Может полнолуние влияет?))))

  Ответить  
 
 автор: sim5   (06.02.2009 в 17:24)   письмо автору
 
   для: sotkom   (06.02.2009 в 17:07)
 

ID должно быть уникальным! А для этого лучше делать это поле с автоинкрементом, и трогать (редактировать) это поле не надо, ибо, если таблицы организованы разумно, то по этому ID могут быть связаны другие таблицы. И что получиться, если вы начнете изменять их?
Поле порядкового номера, это будет простое числове поле, например, поле ID, поле порядкового номера, имя юзера:
135, 5,user1
138,6,user2
215, 7,user1
....

Если теперь вы удаляете запись ID 138, то для всех записей у которых поле порядкового номера больше 6, нужно сделать обновление - уменьшить значение этого поля на единицу, посредством запроса UPDATE SET `num` = `num`-1, где num, это имя поля порядкового номера (как пример) .
А при добавлении новой записи, нужно узнать максимальное значение этого поля, и для новой (ставляемой) записи указать ему значение на единицу больше.

  Ответить  
 
 автор: sotkom   (06.02.2009 в 17:46)   письмо автору
 
   для: sim5   (06.02.2009 в 17:24)
 

спс., идея понятна, но это если 100, 1000 записей..., а если 10000, 100000....

  Ответить  
 
 автор: sim5   (06.02.2009 в 17:50)   письмо автору
 
   для: sotkom   (06.02.2009 в 17:46)
 

Вам что нужно? Если вам этот номер не потребуется, ну, например, по нему вы будете пермещать пользователя в списке рейтингов, то значит забудьте. Если вас интересует, только порядковый номер списка (коли вы задаете вопрос выше), то нумеруйте сортированные записи при выводе вот и все. По куакому полю вы будете сортировать, по ID, дате добавления и т.п., вам виднее.
Если и 100000, то так тоже, другого способа нет.

  Ответить  
 
 автор: sotkom   (06.02.2009 в 18:04)   письмо автору
 
   для: sim5   (06.02.2009 в 17:50)
 

в том и вопрос, чтобы пользователю выдавался его порядковый номер в списке. Нужно посчитать его номер при выводе, а вот как это реализовать??? Дополнительное поле вводить в таблицу проблематично, править много придется по скрипту....

  Ответить  
 
 автор: sim5   (06.02.2009 в 18:20)   письмо автору
 
   для: sotkom   (06.02.2009 в 18:04)
 

В общем так. Если вам нужен просто порядок при выводе, и этот порядковый номер никак не свзан какими либо условиями для пользователя, то в цикле, в котором вы производите вывод полученного из таблицы ресурса, проставляйте порядковый номер:
$i = 1;
while (...) {
echo $i ... //выводим номер порядковый номер, что-то еще
$i++;
}
Вы уж определитесь сначала для чего вам нужен этот порядок, а то вокруг да около...

  Ответить  
 
 автор: sotkom   (06.02.2009 в 18:32)   письмо автору
 
   для: sim5   (06.02.2009 в 18:20)
 

я конечно извиняюсь, но я не знаю как еще проще выразиться....
Делаю запрос на выбор из строки
$q="select * from users where login='$login' ";
$r=@mysql_query($q);

Как определить какая по счету строка этого юзера от верха таблицы user?
Нужно показать пользователю его порядковый номер в таблице! Именно порядковый номер!!!!

  Ответить  
 
 автор: sim5   (06.02.2009 в 18:40)   письмо автору
 
   для: sotkom   (06.02.2009 в 18:32)
 

Начните с этого читать:

>для: sotkom (06.02.2009 в 16:18)
>У таблицы нет верха, все записи внавал...

И далее по порядку. Или что, начинать полемику заново?

  Ответить  
 
 автор: sotkom   (06.02.2009 в 18:44)   письмо автору
 
   для: sim5   (06.02.2009 в 18:40)
 

понятно, спасибо, буду пробовать подсказку Михая1982 - "select count (user_id) from users WHERE user_id<(select user_id from users where login='$login')", она по теме....

  Ответить  
 
 автор: Loki   (06.02.2009 в 19:18)   письмо автору
 
   для: sotkom   (06.02.2009 в 18:32)
 

Решал недавно такую задачку. Только мне надо было по рейтингу расположить. В итоге сделал вот так:
<?
$current_position
=$db->selectCell("SELECT COUNT(rating) FROM users WHERE rating>$var"); //где $var - рейтинг текущего пользователя.

  Ответить  
 
 автор: sotkom   (06.02.2009 в 19:22)   письмо автору
 
   для: Loki   (06.02.2009 в 19:18)
 

да, тоже самое почти, смысл тот же...

  Ответить  
 
 автор: nikita2206   (06.02.2009 в 21:27)   письмо автору
 
   для: sotkom   (06.02.2009 в 19:22)
 

вы сначала должны понять что такое - порядковый номер.
если вы создадите в базе поле ИД с автоинкрементом, то при поступлении самой первой записи в БД, этот ИД у этой записи станет равным 1, вторая запись - 2, третья - 3.., n'ная - n. если вы удаляете одного пользователя, кпримеру 5'ого из 10, то 10'ый остается десятым зарегестрированым пользователем.... можно конечно сделать то что вы хотите при помощи циклов, но это во первых сильно замедлит работу системы при хотябы 10000 зарегестрированых пользователей, вовторых это бессмыслено всё....

  Ответить  
 
 автор: sim5   (07.02.2009 в 05:01)   письмо автору
 
   для: nikita2206   (06.02.2009 в 21:27)
 

Дело в том, что порядок может быть "синхронным" или "асинхронным", если говорить не о первичном ключе, а именно о порядке.

Вы командир отделения, и у вас 4 бойца - Иванов, Петров, Сидоров, Николаев, и "на первый-второй расчитайсь" будет: 1 - Иванов, 2 - Петров, 1 - Сидоров, 2 - Николаев. Боец Петров натер мозоль сапогом, и попал в санчасть, теперь: 1 - Иванов, 2 - Сидоров, 1 - Николаев. При этом у вас, как у командира отделения, в общем списке, по алфавиту, Николаев будет идти всегда вторым, после Иванова. Но Николаеву это пофиг, ему дана команда расчитаться, он ее и выполняет. Это асинхронный порядок (нумерация).
Вы родственник Абрамовича, и он прикупил для вас футбольную команду, и у нее есть игроки под номерами: 15 - Иванов, 11 - Петров, 9 - Сидоров, 23 - Николаев. Во время матча может происходить замена - вместо выбывшего Петрова (11), будет играть Сидоров (9). Сидоров при этом никак не получит номера 11. Но при этом, все игроки, в табеле бухгалтера клуба, имеют другие идинтификационные номера, и для бухгалтера пофигу какой полевой номер у игрока, а для фанатов вашего клуба нет. Это синхронный порядок (нумерация).

Чего хочет автор, так и осталось загадкой.

  Ответить  
 
 автор: sotkom   (07.02.2009 в 08:59)   письмо автору
 
   для: sotkom   (06.02.2009 в 16:18)
 

все сделал, рассказываю может кому пригодится....
сортируем по id (от меньшего к большему ASC), достаем нужного юзера (а точнее его user_id), потом делаем следующий запрос:
SELECT COUNT(id) FROM `users` WHERE `id` <= '$user_id'

Показываем юзеру его место в таблице!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования