Я надеялся, что не должен публиковать здесь, но я весь день работал без разговора. У меня есть код для ранжирования записей в моей таблице, а формат, который мне нужен, - 1, 1, 3, 4, 5, 5, 5, 8. Код, который мне удается заметить связанную запись на первом две записи, которые равны, но затем игнорируют третью. Он также не пропускает правильно. Так, например, если первые 3 записи идентичны, они оценивают их 1, 1, 2. Это код, который у меня есть, я использовал только MySQL в течение примерно 7 месяцев, поэтому, без сомнения, это не идеально:Ранжирование уведомляет об отношениях, но не пропускает соответствующие ранги после этого
<?php
$year = "$_POST[year]";
$gender = "$_POST[gender]";
$age = "$_POST[age]";
$event = "$_POST[event]";
// Formulate Query
$query = sprintf("SELECT CONCAT(athletes.firstname,' ',athletes.lastname) AS athletename, athletes.athleteid, events.eventid, events.eventname, events.eventcode, meetings.meetingid, meetings.meetingname, meetings.location, meetings.meetingdate, meetings.year, DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, results.performance, results.performance, results.eventid, agegroups.agegroupid, agegroups.agegroup
FROM results
JOIN athletes ON athletes.athleteid = results.athleteid
JOIN meetings ON meetings.meetingid = results.meetingid
JOIN events ON events.eventid = results.eventid
JOIN agegroups ON agegroups.agegroupid = results.agegroupid
WHERE results.performance = ANY (SELECT MIN(results.performance) FROM results WHERE meetings.year LIKE '%s' AND athletes.gender LIKE '%s' AND agegroups.agegroup LIKE '%s' AND results.eventid='%s'GROUP BY results.athleteid) ORDER BY results.performance asc
",
mysql_real_escape_string($year),
mysql_real_escape_string($gender),
mysql_real_escape_string($age),
mysql_real_escape_string($event));
// Perform Query
$result = mysql_query($query);
// Check result
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
// HTML for ranking table
echo "<table width='100%' border='0'>";
echo "<tr><th width='25%' align='left'>Name</th>";
echo "<th width='10%' align='left'>Perf</th>";
echo "<th width='10%' align='left'>Age</th>";
echo "<th width='45%' align='left'>Meeting</th>";
echo "<th width='15%' align='right'>Date</th></tr>";
// Use result
$rank = $prevScore = 0; while ($row = mysql_fetch_assoc($result)) {
if ($row['performance'] > $prevScore) $rank++;
$prevScore = $row['performance'];
echo "<table valign='top' border='0' width='100%'>";
echo "<tr><td width='25%'> <a href='profile.php?id=$row[athleteid]'> $row[athletename] </a> </td>";
echo "<td width='10%'> $rank </td>";
echo "<td width='10%'> $row[performance] </td>";
echo "<td width='10%'> $row[agegroup] </td>";
echo "<td width='45%'> <a href='meeting.php?id=$row[meetingid]'> $row[meetingname] </a></td>";
echo "<td width='15%' align='right'> $row[date] </td></tr>";
}
echo "</table>";
// Free the resources associated with the result set
mysql_free_result($result);
?>
Я инициализируется в $ naive_rank и $ aware_rank как $ naive_ra nk = 0; $ aware_rank = 0; это верно? Выполнение этого дало мне порядок 1, 1, 3, 4, поэтому он изменил способ его пропущения, единственная проблема в том, что мои первые 3 записи имеют одинаковое значение, поэтому на самом деле это должно читать 1, 1, 1, 4 – MarkyMark
Я не уверен, почему он не узнает, что первые три одинаковы. Является ли ваш номер производительности не int? – Umbrella
Нет. Я получил его как varchar, потому что он варьируется между длительностью времени от 10 секунд до 2 десятичных знаков до 2 часов, а также расстояниями и точками в зависимости от типа события. Это база данных по легкой атлетике, которую я разрабатываю, поэтому это казалось наиболее подходящим способом включения всех типов производительности в один столбец – MarkyMark