2010-03-16 1 views
2

Я не настолько разбираюсь в MYSQL, поэтому мои извинения заранее - это глупый вопрос.Опубликовать высокие результаты и получить позицию

Я создал супер базовую таблицу высоких результатов PHP. Вставив новый балл в таблицу БД, я бы хотел получить позицию этого балла, чтобы получить 10 результатов с оценкой лиц, попадающих в этот диапазон.

Мой ВСТАВИТЬ запрос выглядит примерно так:

$stmt = $mysqli->prepare("INSERT INTO highscores (name, time, score) VALUES (?, ?, ?)"); 
$stmt->bind_param('sdi', $name, $time, $score); 

UPDATE - Я ищу способ сделать это с наименьшим количеством запросов, как это возможно. Я помню, что читал что-то о получении INSERT ID при вставке, но мне все же пришлось бы сделать второй запрос, чтобы получить эти результаты.

+0

Что вы подразумеваете под «позицией этой оценки»? Позиция в таблице БД? «... попадает в этот диапазон». какой диапазон, вы добавили один новый счет? –

+0

Ах, хороший вопрос. Я имел в виду позицию, связанную со счетом. Итак, 1-й будет иметь самый высокий балл, последний самый низкий. – majman

ответ

6

Чтобы получить число людей, которые набрали больше, чем текущий счет:

SELECT COUNT (*) FROM table_name WHERE оценка> $ оценки

Таким образом, счет вы рейтинг будет в 1 + mysql_result($result, 0)-я место.

+0

Можно ли объединить это в одно утверждение? Или мне нужно сделать отдельный запрос? – majman

+0

Чтобы захватить 10 баллов рядом с текущим, а затем найти позицию? Мой подход состоял бы в том, чтобы сначала получить этот рейтинг, а затем переходить к таблице еще раз для 10 или около того записей в пределах диапазона. –

2

«... но мне все равно придется сделать второй запрос, чтобы получить эти результаты».

Для того, чтобы получить результат, вам не нужно делать INSERT 1st, вы можете получить результат без вставки строки. Как предложил Джо Mejewski, вы можете сделать:

$query = "SELECT COUNT(*) FROM highscores WHERE score > '" . $score . "'"; 

Итак, если вы хотите, чтобы вставить строку, вам нужен 2-й запрос.

«Я ищу способ сделать это с как можно меньше запросов!»

В любом случае вам нужно два запроса и получения последним добавленным идентификатором (которым я не понимаю, если вы разместили один автоинкрементного идентификатор в вашей таблице рекордов) woudn't помочь вам, потому что вам не нужно, чтобы получить, что id или одну строку, но все строки, которые превышают введенные вами.

Ваш комментарий: «... 1-й будет иметь самый высокий балл, последний самый низкий».

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

SELECT * FROM highscores ORDER BY score DESC 

Вот и все!

+0

Спасибо, Марко. Ты поставил меня на правильный путь! – majman

0

Я собираюсь выйти на конечность и сказать, что нет способа сделать это одним запросом. Таким образом, наименьшее количество операторов SQL, которое, как я полагаю, имеет целью, будет 2: один для вставки и один для запроса.

0

Что случилось с использованием ключевого слова LIMIT?

Смежные вопросы