За последние 24 часа нас посетили 118546 программистов и 8019 роботов. Сейчас ищут 1668 программистов ...

Вывести место в топе

Тема в разделе "PHP для новичков", создана пользователем Assassin-3009, 28 май 2016.

  1. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    2016-05-28_19-25-26.png
    Нужно вывести на каком месте находится определённый пользователь (будет отображаться в его профиле).

    Код (Text):
    1. <? $top = mysqli_fetch_assoc(mysqli_query($db,"SELECT DENSE_RANK() OVER(ORDER BY rating) AS top FROM users WHERE login LIKE '".$_GET['login']."'")); ?>
    URL 2016-05-28_19-28-54.png

    Так оно выводится:
    Код (Text):
    1. <td>Место в топе: <b><?=$top['top']?></b></td>
    Но выдаёт ошибку:
    Код (Text):
    1. Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in...
     
  2. Den1xxx

    Den1xxx Новичок

    С нами с:
    6 май 2016
    Сообщения:
    16
    Симпатии:
    2
    видимо в mysqli_fetch_assoc прилетает не mysqli_result, а false
    Попробуйте отдебажить
    Код (Text):
    1. <?  var_dump(mysqli_query($db,"SELECT DENSE_RANK() OVER(ORDER BY rating) AS top FROM users WHERE login LIKE '".$_GET['login']."'"); ?>
    А вообще к коду 2 замечания:
    1. $_GET['login'] нужно экранировать перед запросом
    2. LIKE у вас видимо не сработает как задумано — искомую строку нужно обрамлять, хотя бы, % Иначе непонятно, зачем LIKE, если можно просто знак равно?
     
  3. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Выдаёт:
    Код (Text):
    1. bool(false)
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Гуглить учись. Это одна из самых распространенных ошибок. Sql запрос не корректный. Дебаж. mysqli_error
    --- Добавлено ---
    Откуда выкопал DENSE_RANK? Ты расширением от mysql подключаешься к mssql?:eek:
     
  5. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(ORDER BY rating) AS top FROM users WHERE login LIKE 'Assassin-3009'' at line 1
    --- Добавлено ---
    http://www.sql-tutorial.ru/ru/book_rank_dense_rank_functions.html
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Страдай. Когда поймешь смысл того что я написал, найдешь и решение)
     
  7. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Нету вариантов кода, чтобы выводилось задуманное?
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Гугли, а раз используешь mysql читай учебник по mysql а не статьи всякие.
     
  9. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Ты всем отвечаешь "гугли"? Зачем отзываться, если не помогаешь с решением?
     
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ты не думаешь а ждешь готовый ответ. В таких случаях я отвечаю гугли.
    Я помог с твоей проблемой о которой ты писал в самом начале, проблема в sql.
     
  11. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Сюда обратился после долгих исканий в гугле, как раз-таки. Что запрос некорректный, это и так ясно было...
     
  12. Den1xxx

    Den1xxx Новичок

    С нами с:
    6 май 2016
    Сообщения:
    16
    Симпатии:
    2
  13. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Рейтинг и так выводится, мне нужно место, которое он занимает в поле rating (то есть - 1):
    2016-05-28_20-29-18.png
     
  14. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  15. Den1xxx

    Den1xxx Новичок

    С нами с:
    6 май 2016
    Сообщения:
    16
    Симпатии:
    2
    Код (Text):
    1. SELECT COUNT(DISTINCT rating) as top FROM users WHERE rating >= (SELECT rating FROM users WHERE login='$login' LIMIT 1);
     
    Assassin-3009 нравится это.
  16. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Спасибо огромное! Работает так, как надо)