Используйте Single Row Query с MySQL и PHP - PullRequest
3 голосов
/ 09 января 2009

скажи, что у меня есть

$result =  mysql_query('SELECT views FROM post ORDER BY views ASC');

и я хочу использовать значение с индексом 30, я предполагал, что буду использовать

mysql_data_seek($result, 30);
$useableResult = mysql_fetch_row($result);
echo $useableResult . '<br/>';

Но это возвращает всю мою таблицу

Что я понял не так?

Редактировать: Woops, у меня на самом деле есть

mysql_data_seek($result, 30);
while($row = mysql_fetch_row($result)){
    echo $row['views'] . '<br/>';
}

Ответы [ 3 ]

5 голосов
/ 09 января 2009

Просто используйте предложение SQL WHERE.

$result = mysql_query('SELECT views FROM post WHERE ID=30')

Если вы не хотите идти по ID, а хотите получить 30-й элемент, который будет возвращен, вы можете использовать LIMIT min, max:

$result = mysql_query('SELECT views FROM post LIMIT 30, 1')

В обоих случаях ваши команды ORDER BY становятся ненужными.

Вот хороший пример использования команды LIMIT для подкачки больших наборов записей.

2 голосов
/ 09 января 2009

Ваш первый пример на самом деле будет делать то, что вы хотите, но будет очень дорого. Второй - выбор всей таблицы, переход к 30-й строке результата, а затем циклический просмотр всех результатов с этого момента.

Вместо этого вы должны сделать следующее, которое вернет только одну строку и будет намного быстрее:

$result =  mysql_query('SELECT views FROM post ORDER BY views ASC LIMIT 30,1');

Обратите внимание, что объяснение LIMIT Совиута не совсем корректно - оно (смещение, количество строк), а не (min, max).

0 голосов
/ 09 января 2009

Вы уверены, что в $ result есть 30 элементов? Возможно, вы захотите проверить, если 30> mysql_num_rows ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...