Выборка id из базы

12
Braindbrigada
На сайте с 10.01.2010
Offline
84
640

Есть таблица id в которой имеют пропуски (1,2,4,7,8,22,25,27,29,31 и т.д.)

К примеру получаю POST'ом 29 нужно выбрать 3 предыдущих id (в этом примере 22,25,27)

Сделал так:

$limit = 3;
$sql = mysql_query("SELECT id FROM advert WHERE id<".$last." ORDER BY date DESC");
while ($row = mysql_fetch_array($sql)){
if($i<$limit){
$id = $row|"id"|;
}
$i++;
}

Пока мало записей работает нормально, но нужно так чтобы не перебирать всю таблицу?

bay_ebook
На сайте с 28.05.2010
Offline
111
#1

$sql = mysql_query("SELECT `id` FROM `advert` WHERE `id`< '".$last."' ORDER BY `id` DESC LIMIT 3");

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

ПС - стандартные ситуации - решение есть в гугле, туча, почему не погуглить?

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
Braindbrigada
На сайте с 10.01.2010
Offline
84
#2
ПС - стандартные ситуации - решение есть в гугле, туча, почему не погуглить?

Ткните!?.....

bay_ebook
На сайте с 28.05.2010
Offline
111
#3
Braindbrigada:
bay_ebook, тут получим 27 вместо 22,25,27


Ткните!?

вашей таблицы у меня нет, посему протестирован на своей

SELECT * 
FROM `z_preview`
WHERE `id` <16
ORDER BY `id`
LIMIT 3

результаты:

Отображает строки 0 - 2 ( 3 всего, запрос занял 0.0011 сек.) [id: 11 - 13]

id у меня тоже с "пропусками"

Braindbrigada
На сайте с 10.01.2010
Offline
84
#4
Есть таблица id в которой имеют пропуски (1,2,4,7,8,22,25,27,29,31 и т.д.)
К примеру получаю POST'ом 29 нужно выбрать 3 предыдущих id (в этом примере 22,25,27)

+ условие type может быть 1, 2 или 3

Забыл указать)

$limit = 3;
$sql = mysql_query("SELECT id FROM advert WHERE type=1 AND id<".$last." ORDER BY date DESC");
while ($row = mysql_fetch_array($sql)){
if($i<$limit){
$id = $row|"id"|;
}
$i++;
}

id - type

1 - 1

2 - 1

4 - 2

7 - 1

8 - 2

22 - 3

25 - 2

27 - 1

29 - 1

31 - 3

$sql = mysql_query("SELECT `id` FROM `advert` WHERE `type`=1 AND `id`< '".$last."' ORDER BY `id` DESC LIMIT 3");

Выдаст 27

maldivec
На сайте с 04.11.2008
Offline
160
#5
Braindbrigada:
Ткните!?

Так это в любом мануале по SQL. Банальный синтаксис оператора SELECT, а конкретно LIMIT, о котором вам и говорят. Нет смысла тянуть все записи (может их миллион) и потом сравнивать, когда можно взять именно требуемое количество.

bay_ebook
На сайте с 28.05.2010
Offline
111
#6
Braindbrigada:

Ткните!?

http://habrahabr.ru/qa/13587/

IL
На сайте с 20.04.2007
Offline
435
#7
Braindbrigada:
+ условие type может быть 1, 2 или 3

Да тоже самое, ничего не изменится..

разве что при очень больших таблицах будет смысл индекс добавить :)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Braindbrigada
На сайте с 10.01.2010
Offline
84
#8

Всем спасибо) Заработался... Сам вижу, что так, но понять не могу почему у меня 27 выходит...((

bay_ebook
На сайте с 28.05.2010
Offline
111
#9
Braindbrigada:
Всем спасибо) Заработался... Сам вижу, что так, но понять не могу почему у меня 27 выходит...((

ну так, скрипт покажите в студию)

Braindbrigada
На сайте с 10.01.2010
Offline
84
#10
bay_ebook:
ну так, скрипт покажите в студию)

Все работает. Спасибо! ХЗ почему не хотел...

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий