назначить конкретное значение для элемента массива с помощью запроса MySQL - PullRequest
0 голосов
/ 04 сентября 2010

Идея состоит в том, чтобы запустить своего рода ранжирующую команду MySQL, такую ​​как:

$sql = mysql_query("SELECT f_score FROM ".TBL_FACTIONS." ASC");

РЕДАКТИРОВАТЬ: мне тоже нужно добавить WHERE f_id = $ id здесь.

Числовое значение в моей таблице базы данных MySQL в столбце f_score должно определять ранг.f_score содержит только числовые значения, от 0 до чего угодно, пользовательские действия складываются и вычитаются из партитуры.

, а затем используйте $ sql для циклического прохождения массива и «ранжирования» каждого элемента массива.Я думаю, что это должно присвоить номер конкретной переменной, чтобы я мог отобразить номер на веб-странице.

Например Ваш ранг: 01

Я ищу что-то легковесное, но если это невозможно, выиграйте минимальное использование сервераМне придется засунуть это в работу cron или что-то, что на самом деле не идеально.Я размышлял по аналогии с массивом и циклами или чем-то подобным?

Любая помощь будет принята с благодарностью!

-Каллум

1 Ответ

1 голос
/ 04 сентября 2010

Этот код:

$result = mysql_query("SELECT f_name FROM ".TBL_FACTIONS." ORDER BY f_score DESC");
$i = 1;

while($row = mysql_fetch_assoc($result))
{
    echo "{$row['f_name']} & Rank: {$i}<br>";
    $i++;
}

Будет выводить:

Bla bla & Rank: 1
Foo bar & Rank: 2
Etc.

SQL для ранга конкретной записи немного сложен.Вы можете попробовать следующее:

// E.g. rank for f_id = 123
$id = 123;

$sql = "
SELECT `a`.`rank` + `b`.`rank` AS `rank`
FROM (SELECT COUNT(*)+1 AS `rank`
    FROM ".TBL_FACTIONS."
    WHERE `f_score` > (SELECT `f_score`
        FROM ".TBL_FACTIONS."
        WHERE `f_id` = {$id})) AS `a`
STRAIGHT_JOIN (SELECT COUNT(*) AS `rank`
    FROM ".TBL_FACTIONS."
    WHERE `f_score` = (SELECT `f_score`
        FROM ".TBL_FACTIONS."
        WHERE `f_id` = {$id}) AND `f_id` < {$id}) AS `b`
";

$result = mysql_query($sql);
$row = mysql_fetch_row($result);
echo "{$id} is ranked {$row[0]}";

Я нашел запрос здесь , и он имеет смысл, но, пожалуйста, тщательно проверьте, если полученные результаты соответствуют ожидаемым.

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

$id = 123;
$result = mysql_query("SELECT f_id FROM ".TBL_FACTIONS." ORDER BY f_score DESC");
$i = 1;

while($row = mysql_fetch_assoc($result))
{
    if($row['f_id'] == $id)
    {
        echo "{$row['f_id']} is ranked {$i}<br>";
        break;
    }
    $i++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...