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 😂
Fearful, ну вот видите совсем другой разговор :)
Только вот вы уверены, что это будет быстрее, тесты проводили?
Будет однозначно, потому что запрос можно представить в виде
SELECT * FROM table WHERE cat=number AND pos IN (...)
а тут нет ни лимита, ни сортировки, потому быстрее 100% будет
не забывайте, что нам нужен в любом случаи полный запрос, чтобы узнать количество записей для отображения листинга.
Так смотрите, у вас есть номер последней новости в данной категории. Значит если у вас 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.
Это мысли, которые хранятся, чисто в вашей голове и нам трудно понять их. А то, что вы без кода тут начинаете оперировать ими, как чем-то уникальным и лучшим, выглядит по крайней мере глупо.
Вам надо выбирать записи, но не зная позиции вы выбираете нужное количество с нужного места, используя limit.
А если бы у вас было еще одно поле где новости были пронумерованы в порядке возрастания для каждой категории. То вы бы сразу выбирали бы новости по номеру в данной категории. При этом limit абсолютно ненужен, сортировка по id тоже.
По сути это напоминает то-же автоинкремент, только для категории, и позицию проставляете вы при добавлении новости а не база. Только единственное отличие что при удалении новости у вас не должно быть разрывов нумерации.
а это решается при удалении новости одним запросом, примерно такого вида
UPDATE table SET pos=pos-1 WHERE cat=number AND id>del_id
Ого, это такой тренд нынче. Зайти кинуть умную фразу, чтобы все охали и ахали.
Лучше рукоплещите 😂
Избыточность, конечно же, уже побежал переписывать структуру и CMS для избыточности, которая никому нафиг не нужна. Аха?
Ну если у вас такой код что при добавлении одного поля в таблицу, и по одному запросу на добавление и удаление новости, надо переписывать структуру и CMS, то грош цена и коду и CMS 😂
Но варианты оптимальные я описал выше :)
Оптимальный вариант, это делать избыточность при добавлении данных.
ну старье, это у процентов 15%, а то и более, оно не будет работать.
Как на меня, в данном случае это не критично.
Valeriy, с помощью css "автоматом" такого не сделать
Если не заводить шарманку, про поддержку старья и прочее, то это делается легко
http://htmlbook.ru/css/column-count
Fearful, конечно профессор, шли бы только мимо :)
Конечно уважаемый, продолжайте и дальше морочить людям голову.
Ни структуры таблицы не показали, ни explain запроса из первого поста.
И правильно, зачем, пусть телепаты напрягаются.
5 страниц рассуждений о сферическом коне в вакууме
Примари индекс
А explain что показывает?
З.Ы. вообще такое чувство что у вас на каком-то поле висит фултекст индекс
Индексы есть и на id и на cat
На id какой индекс стоит?