У меня есть следующая таблицаCountry
country clicks ------- ------ 0 222 66 34 175 1000 45 650
И я использую следующий оператор MYSQL, чтобы получить рейтинг любой страны на основе столбца кликов (всего один результат)
SELECT COUNT(*) rank FROM countryTable a JOIN countryTable b ON a.clicks <= b.clicks WHERE a.country = 45
Вышеупомянутое вернет «2». Затем в моем php-коде я пытаюсь получить доступ к значению ранга с помощью
$row = mysql_fetch_array($result) or die(mysql_error()); echo $row['rank'];
Но это не возвращает никакого результата, если страна является номером один. т.е. a.country = 175
Если вы ищете рейтинг, используйте это:
SELECT @rownum := @rownum + 1 AS num, t.country, t.clicks FROM countryTable t, (SELECT @rownum := 0) r ORDER BY t.clicks DESC
результат
| NUM | СТРАНА | CLICKS | -------------------------- | 1 | 175 | 1000 | | 2 | 45 | 650 | | 3 | 0 | 222 | | 4 | 66 | 34 |
Соединение ON – это объединение между столбцами, а не сравнение.
ОБНОВЛЕНО
SELECT COUNT(*)+1 rank FROM countryTable WHERE clicks > (SELECT clicks FROM countryTable WHERE country = 45)
Рассуждение: поиск ранга означает поиск количества записей с кликами> заданный клик.
Поэтому для 175 существует 0 страна с лучшим кликом => ранг 1, страна 45, 1 страна с лучшим кликом => ранг 2
PHP
$result = mysql_query("....") $row = mysql_fetch_array($result) ...
Обычно это должно работать, если у вас не возникла проблема с подключением к серверу. Здесь вы должны использовать свое умение отладки. Сделайте var_dump ($ result), чтобы увидеть, возвращает ли он false, если да, то это проблема подключения (проверьте mysql_connect или что-то еще)
@PutraKg Я думаю, вы можете закрыть этот вопрос, потому что я ответил на него в этом сообщении. MYSQL не возвращает результат в PHP, когда его спрашивают только о первом рейтинге 😉