MySQL SELECT

12
L
На сайте с 03.05.2006
Offline
171
851

Помогите придумать структуру таблицы/таблиц и написать правильный SELECT.

Задача:

Есть объекты `id` = [1..очень много]

У каждого объекта есть данные `ido` = [1...очень много]

при этом `ido` можно сделать со сквозной нумерацией (каждое данное имеет уникальный IDO) или нумерация для каждого объекта своя (каждое данное имеет уникальную комбинацию ID, IDO)

Как выбрать N последних данных для каждого объекта?

или вот конкретный пример. Если 100 городов, и для каждого города записываются новости. Хочется на страницу вывести по 10 последних новостей для каждого города.

totamon
На сайте с 12.05.2007
Offline
437
#1

это основы, может почитать по sql если такие простые вещи вызывают вопросы, или специалиста нанять...

SELECT column,...
[FROM table WHERE definition]
[ORDER BY col_name [ASC | DESC], ...]
[LIMIT [offset], rows]

зы. /ru/forum/comment/13684688

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#2

Или через phpmyadmin через раздел "Поиск" задать, что вы хотите. Он выведет вам запрос.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
totamon
На сайте с 12.05.2007
Offline
437
#3

LEOnidUKG, нечего еще искать)

luxs:
Помогите придумать структуру таблицы/таблиц
L
На сайте с 03.05.2006
Offline
171
#4
totamon:
это основы, может почитать по sql если такие простые вещи вызывают вопросы, или специалиста нанять...

Вы наверное не совсем поняли задачу.

Я пока ее решаю создавая кеш последних записей MySQL в еще одной таблице. Но думаю, чожет кто посоветует красивее решение?

---------- Добавлено 09.01.2016 в 17:56 ----------

LEOnidUKG:
Или через phpmyadmin через раздел "Поиск" задать, что вы хотите. Он выведет вам запрос.

select * where `id`=1 order by `ido` DESC limit 5

.

.

.

select * where `id`=1000 order by `ido` DESC limit 5

И как это объединить в один запрос?

A
На сайте с 19.07.2010
Offline
130
#5
luxs:
И как это объединить в один запрос?


select * where `id`=1 order by `ido` DESC limit 5
union all
select * where `id`=2 order by `ido` DESC limit 5
union all
....
select * where `id`=1000 order by `ido` DESC limit 5
.............
L
На сайте с 03.05.2006
Offline
171
#6
admak:

select * where `id`=1 order by `ido` DESC limit 5
union all
select * where `id`=2 order by `ido` DESC limit 5
union all
....
select * where `id`=1000 order by `ido` DESC limit 5

т.е. тысяча последовательных SELECT.... не уверен что это самое оптимальное решение. особанно если БД на несколько сотен миллионов записей

A
На сайте с 19.07.2010
Offline
130
#7

Я ответил только на:

luxs:
И как это объединить в один запрос?

:)

Ставьте реальные цели. (с) старая социальная реклама.

В исходном посте: 100 городов... по 10 последних новостей для каждого города. 100*10=1000 новостей на одной странице. Интересно их кто-нибудь будет читать? :)

Следующий пост: where `id`=1000 order by `ido` DESC limit 5

Итого 5000 новостей на одной странице... километровые портянки в дорвеях нервно курят в сторонке. 😂

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

Получить 10 последних новостей одним запросом будет проблематично. Пытаться испольховать финты типа where ... ido>=max(ido)-5 (при условии, что ido последовательно и непрерывно в пределах одного id) - может вылезти боком при удалении новостей, да и придеться делать лишние телодвижения пля поддержки последовательной и непрерывной нумерации, по затратам - оно того не стоит.

Рабочие варианты: кеширование, как у Вас, последних новостей в отдельной таблице или кеширование уже результирующего html блока.

L
На сайте с 03.05.2006
Offline
171
#8
admak:
:)

:)

Ставьте реальные цели. (с) старая социальная реклама.
В исходном посте: 100 городов... по 10 последних новостей для каждого города. 100*10=1000 новостей на одной странице. Интересно их кто-нибудь будет читать? :)

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

А что я с этим буду делать - это уже следующий вопрос.

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


Рабочие варианты: кеширование, как у Вас, последних новостей в отдельной таблице или кеширование уже результирующего html блока.

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

ПС. Нужно было бы по одной строке на ID найти - воткнул бы DISTINCT `id` в запрос и все...

totamon
На сайте с 12.05.2007
Offline
437
#9
luxs:
Вы наверное не совсем поняли задачу.

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

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

те вы понимаете абстрактные задачи, но спрашиваете у людей которые их не понимают?))

luxs:
Хочется на страницу вывести по 10 последних новостей для каждого города.

например http://webi.ru/webi_articles/8_14_f.html с ограничениями и постобработкой)

L
На сайте с 03.05.2006
Offline
171
#10
totamon:
наверное вы ее не совсем понятно описали... для конкретной задачи давайте конкретные данные, на нормальном программерском форуме вам никто бы отвечать не стал без приведенной структуры таблиц. и, да, видимо я не понял ваших желаний)

т.к. я не знаю как еще можно решить такую задачу, то я дал описание задачи (новости и города) и дал ее в более формальном виде (id, ido).

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

те вы понимаете абстрактные задачи, но спрашиваете у людей которые их не понимают?))

Нихочу никого лично обижать. Но по своему опыту понял что лучше задачу давать и так и так - выше шанс на успех.

totamon:
например http://webi.ru/webi_articles/8_14_f.html с ограничениями и постобработкой)

Вот к ней бы LIMIT прикрутить - было бы то что нужно :) ну и ограничения на размеры там.

12

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