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

Форум PHP

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

 

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

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

тема: Узнать ключ массива
 
 автор: sl1p   (29.10.2008 в 12:14)   письмо автору
 
 

Нужно узнать ключ массива где значение = x

зы. и ещё, можно ли както при запросе:
$my_rank = mysql_query("SELECT `id` FROM `users` ORDER BY `posts` DESC");
сразу полученный результат рассовать в массив?.. тоесть без использования цикла.

заранее сенк..

  Ответить  
 
 автор: sim5   (29.10.2008 в 12:41)   письмо автору
 
   для: sl1p   (29.10.2008 в 12:14)
 

array_search()
$my_rank - это ресурс.

  Ответить  
 
 автор: sl1p   (29.10.2008 в 13:27)   письмо автору
 
   для: sim5   (29.10.2008 в 12:41)
 

причём тут это?..

как вообще можно засунуть сразу всё выбранное из базы в массив чтобы по нему можно было пройтись сёрчем?..

  Ответить  
 
 автор: sim5   (29.10.2008 в 13:28)   письмо автору
 
   для: sl1p   (29.10.2008 в 13:27)
 

Уважаемый, это ваш вопрос - "Нужно узнать ключ массива где значение = x" ?
И кстати, не "гните пальцы", есть нормальные русские слова, либо используйте английские, родные, не выражайтесь "жаргоном" никчемным - "сёрчем".

  Ответить  
 
 автор: sl1p   (29.10.2008 в 13:35)   письмо автору
 
   для: sim5   (29.10.2008 в 13:28)
 

пишу ибо так мне удобней, не вижу перед кем "гнуть пальцы" ещё и на форуме.
За первый вопрос спасибо.

Хотелось бы получить ответ на второй. Как можно без цикла получить массив всех выбранных значений из базы?

  Ответить  
 
 автор: sim5   (29.10.2008 в 13:54)   письмо автору
 
   для: sl1p   (29.10.2008 в 13:35)
 

Ну то что вам удобно, совсем не значит, что это удобно читать другим, как вы думаете?
Вы после выборки получаете ресурс, разницу между массивом и ресурсом улавливаете? Как вы обращаетесь к ресурсу чтобы получить конкретные записи?

  Ответить  
 
 автор: sl1p   (29.10.2008 в 14:00)   письмо автору
 
   для: sim5   (29.10.2008 в 13:54)
 

mysql_fetch_row\assoc

но чтобы получить всё нужен цикл..
а хотелось бы как-то сразу :)

  Ответить  
 
 автор: sim5   (29.10.2008 в 14:06)   письмо автору
 
   для: sl1p   (29.10.2008 в 14:00)
 

Если одна строка в русурсе, пожалуйста.

  Ответить  
 
 автор: sl1p   (29.10.2008 в 18:43)   письмо автору
 
   для: sim5   (29.10.2008 в 14:06)
 

не одна.
просто суть задачи вообще в том, чтобы вытащить все записи и узнать ключ массива такой-то строки, тоесть её номер.

  Ответить  
 
 автор: ddhvvn   (29.10.2008 в 18:49)   письмо автору
 
   для: sl1p   (29.10.2008 в 18:43)
 

короче без цикла нельзя!

>...и узнать ключ массива такой-то строки, тоесть её номер.
вот это не совсем понятно

  Ответить  
 
 автор: sl1p   (29.10.2008 в 19:58)   письмо автору
 
   для: ddhvvn   (29.10.2008 в 18:49)
 

ну это рейтинг пользователя мне нужно вывести типа такого:

Ваш ранк 1 из 134, например:)


пока делаю так..

$my_rank = mysql_query("SELECT `id`,`nick` FROM `users` ORDER BY $type DESC");
$mrc = 1;
while($r=mysql_fetch_row($my_rank)){
if($_SESSION['id'] == $r[0]){$my_rank = "Ваше место: $mrc";break;}
$mrc++;
}

  Ответить  
 
 автор: Trianon   (29.10.2008 в 20:17)   письмо автору
 
   для: sl1p   (29.10.2008 в 19:58)
 

А вот к примеру если в таблице одинаковые показатели у людей:
id nick point
1 Вася 3
2 Коля 5
3 Оля 2
4 Ваня 3
5 Вова 2
6 Леша 5
7 Галя 4

Какой у них у всех должен оказаться посчитанным рейтинг (по полю point) ?

  Ответить  
 
 автор: sl1p   (29.10.2008 в 20:21)   письмо автору
 
   для: Trianon   (29.10.2008 в 20:17)
 

ну бд всё равно тогда както их сортирует.
насколько я понял если попадаются одинаковые значения то смотрит на айди(мб ошибаюсь конечно, но по всей видимости происходит именно так)..

  Ответить  
 
 автор: Trianon   (29.10.2008 в 21:22)   письмо автору
 
   для: sl1p   (29.10.2008 в 20:21)
 

Я не про то, как происходит в базе.
Даже не смотря на то, что база может по разному отсортировать,
Вася с Ваней могут и возбудиться, если им при одинаковых points назначат разные рейтинги. А им назначат.

Я про то, какие значения считаются правильными с точки зрения постановки задачи. С Вашей точки зрения, грубо говоря.

  Ответить  
 
 автор: sl1p   (30.10.2008 в 07:13)   письмо автору
 
   для: Trianon   (29.10.2008 в 21:22)
 

ну одинакового ранка быть не должно.. поэтому было бы хорошо если бы смотрело на айди.:)

хотя если у вас есть предложения, с удовольствием выслушаю:)..

  Ответить  
 
 автор: Trianon   (30.10.2008 в 09:26)   письмо автору
 
   для: sl1p   (30.10.2008 в 07:13)
 

>ну одинакового ранка быть не должно..
>поэтому было бы хорошо если бы смотрело на айди.:)
Вот это-то и непонятно.
>хотя если у вас есть предложения, с удовольствием выслушаю:)..

Корректно рассчитанный ранг берется как-то так:

SELECT u1.id, u1.nick, COUNT(u2.id) AS rank
FROM users u1 JOIN users u2 ON u1.points > u2.points
GROUP BY u1.id, u1.nick

Потребуется, правда, создать фиктивного user'а с числом очков -1.

Кривой (т.е. неодинаковый) можете посчитать сами по аналогии.

  Ответить  
 
 автор: sl1p   (30.10.2008 в 11:05)   письмо автору
 
   для: Trianon   (30.10.2008 в 09:26)
 

хм, спасибо:)
но так и не понял зачем юзеры с "-1"?

  Ответить  
 
 автор: Trianon   (30.10.2008 в 11:11)   письмо автору
 
   для: sl1p   (30.10.2008 в 11:05)
 

>но так и не понял зачем юзеры с "-1"?
Только один такой нужен.
Иначе пользователи с минимумом очков вообще в выдачу включены не будут. Из-за JOIN .

  Ответить  
 
 автор: sl1p   (30.10.2008 в 12:20)   письмо автору
 
   для: Trianon   (30.10.2008 в 11:11)
 

а если убрать "выдёргивание" id и nick?)
оно в принципе ненужно. Нужен только count, тоесть ранк.

  Ответить  
 
 автор: Trianon   (30.10.2008 в 12:52)   письмо автору
 
   для: sl1p   (30.10.2008 в 12:20)
 

ну получите Вы (для моего примера)
3

1
3
1
6
5

и что это даст?

  Ответить  
 
 автор: sl1p   (30.10.2008 в 13:07)   письмо автору
 
   для: Trianon   (30.10.2008 в 12:52)
 

эх, я понял..)
буду юзать ваш пример выше.
спасибо:)

только вот как бы ещё теперь с ним "синхронизировать" полный вывод статистики..
неужели придётся для каждого такое вытворять?:)

сейчас вывожу вот так:
$result = mysql_query("SELECT `nick` , `$type` as val FROM `users` ORDER BY $type DESC LIMIT $start_limit , $max_rows");
$i      = $now_page_start;
$hlight = "";
        while($row = mysql_fetch_assoc($result)){
        if($il){
         if($_SESSION['nick']==$row['nick']) $hlight = " style=\"background:#68859a;\"";
         else $hlight = "";
        }
        echo"\n<tr$hlight><td class=\"submsg\" width=\"1\">$i&nbsp;</td><td>".html_escape($row['nick'])."</td><td align=\"right\">&nbsp;{$row['val']}<img src=\"img/$type.gif\"></td></tr>";
        $i++;
        }

тоесть получается все выводятся постранично, и ранки выводятся начиная от первого номера строки:)

  Ответить  
 
 автор: Trianon   (30.10.2008 в 13:22)   письмо автору
 
   для: sl1p   (30.10.2008 в 13:07)
 

не понял.

  Ответить  
 
 автор: sl1p   (30.10.2008 в 13:28)   письмо автору
 
   для: Trianon   (30.10.2008 в 13:22)
 

ну это похоже на мой способ вычисления ранка выше:
просто берутся записи с лимитом в 40,80 например. $i = 40 и уже до конца страницы ранк = $i; $i++.

тоесть короче выше мы обсуждали как вывести ранк одного пользователя, а теперь, как вывести ранки всех пользователей:)

  Ответить  
 
 автор: Trianon   (30.10.2008 в 14:59)   письмо автору
 
   для: sl1p   (30.10.2008 в 13:28)
 

мой запрос выводит ранги всех.

  Ответить  
 
 автор: sl1p   (30.10.2008 в 15:53)   письмо автору
 
   для: Trianon   (30.10.2008 в 14:59)
 

ок, а как тогда вывести ранк одного?)

  Ответить  
 
 автор: Trianon   (30.10.2008 в 16:14)   письмо автору
 
   для: sl1p   (30.10.2008 в 15:53)
 

SELECT COUNT(u2.id) AS rank
FROM users u1 JOIN users u2 ON u1.points > u2.points
WHERE u1.id =$user_id

  Ответить  
 
 автор: sl1p   (30.10.2008 в 17:01)   письмо автору
 
   для: Trianon   (30.10.2008 в 16:14)
 

сенки!
буду тестить..:)

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

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