Fearful

Рейтинг
45
Регистрация
24.04.2009
LEOnidUKG:
Fearful, ну вот видите совсем другой разговор :)

Только вот вы уверены, что это будет быстрее, тесты проводили?

Будет однозначно, потому что запрос можно представить в виде

SELECT * FROM table WHERE cat=number AND pos IN (...)

а тут нет ни лимита, ни сортировки, потому быстрее 100% будет

LEOnidUKG:

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

Так смотрите, у вас есть номер последней новости в данной категории. Значит если у вас 30 новостей на странице и вам надо выбрать например новости на 30 странице.

То вы у вас получается

SELECT * FROM table WHERE cat=number AND (pos<=A AND pos>B)

где

A = номер_последней_новости_категории - (страница-1)*количество_новостей_на_странице

B = номер_последней_новости_категории - страница*количество_новостей_на_странице

Так как количество новостей на странице не сильно велико, то запрос легко превратить в

SELECT * FROM table WHERE cat=number AND pos IN (...)

Причем если новость удалять раньше чем пересчитывать номера новостей для категории, то можно еще и создать уникальный составной индекс для сat и pos.

LEOnidUKG:
Это мысли, которые хранятся, чисто в вашей голове и нам трудно понять их. А то, что вы без кода тут начинаете оперировать ими, как чем-то уникальным и лучшим, выглядит по крайней мере глупо.

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

А если бы у вас было еще одно поле где новости были пронумерованы в порядке возрастания для каждой категории. То вы бы сразу выбирали бы новости по номеру в данной категории. При этом limit абсолютно ненужен, сортировка по id тоже.

По сути это напоминает то-же автоинкремент, только для категории, и позицию проставляете вы при добавлении новости а не база. Только единственное отличие что при удалении новости у вас не должно быть разрывов нумерации.

а это решается при удалении новости одним запросом, примерно такого вида

UPDATE table SET pos=pos-1 WHERE cat=number AND id>del_id

LEOnidUKG:
Ого, это такой тренд нынче. Зайти кинуть умную фразу, чтобы все охали и ахали.

Лучше рукоплещите 😂

LEOnidUKG:
Избыточность, конечно же, уже побежал переписывать структуру и CMS для избыточности, которая никому нафиг не нужна. Аха?

Ну если у вас такой код что при добавлении одного поля в таблицу, и по одному запросу на добавление и удаление новости, надо переписывать структуру и CMS, то грош цена и коду и CMS 😂

LEOnidUKG:
Но варианты оптимальные я описал выше :)

Оптимальный вариант, это делать избыточность при добавлении данных.

Sentoro:
ну старье, это у процентов 15%, а то и более, оно не будет работать.

Как на меня, в данном случае это не критично.

Sentoro:
Valeriy, с помощью css "автоматом" такого не сделать

Если не заводить шарманку, про поддержку старья и прочее, то это делается легко

http://htmlbook.ru/css/column-count

LEOnidUKG:

Fearful, конечно профессор, шли бы только мимо :)

Конечно уважаемый, продолжайте и дальше морочить людям голову.

Ни структуры таблицы не показали, ни explain запроса из первого поста.

И правильно, зачем, пусть телепаты напрягаются.

5 страниц рассуждений о сферическом коне в вакууме

LEOnidUKG:

Примари индекс

А explain что показывает?

З.Ы. вообще такое чувство что у вас на каком-то поле висит фултекст индекс

LEOnidUKG:
Индексы есть и на id и на cat

На id какой индекс стоит?

Всего: 367