powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблемы с запросом
5 сообщений из 5, страница 1 из 1
Проблемы с запросом
    #39493032
Igor Chubenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброе время суток.
При запуске запроса:
Код: sql
1.
2.
3.
4.
SELECT g.*
FROM `goods` g INNER JOIN `goods_cats` c ON (c.id = g.cat_id) AND c.hide = 0
ORDER BY c.pos, id asc
LIMIT 0, 100


получаю ошибку:
/* SQL Ошибка (126): Incorrect key file for table '/dev/shm/#sql_3f33_0.MYI'; try to repair it */

Если убрать "ORDER BY c.pos, id asc" - то все нормально.
По ходу проблема в том, что упираюсь в лимит размера файла на сервере.
Вопрос: можно ли как-то перестроить выборку, чтоб в результате получать нужный набор данных.
Увеличить лимит нет возможности.
...
Рейтинг: 0 / 0
Проблемы с запросом
    #39493254
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может места на диске не хватает..
Или таблица повредилась -> https://dev.mysql.com/doc/refman/5.7/en/repair-table.html
...
Рейтинг: 0 / 0
Проблемы с запросом
    #39493920
Igor Chubenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточнял у администраторов, то сказали, что максимальный пакет 1 Мб.
Тоесть при моем варианте g.cat_id (int) этого хватит для около 100000 айдишек категорий, а в запрос по категориями выбирается 138000, что и вызывает проблему при "ORDER BY", поскольку мускул пытается запихнуть все в указанный ранее файл, размер которого становится больше 1 Мб.

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

Пробовал сначала выбрать первым запросом айдишки категорий, сформировать строку и во втором запросе через c.id IN (...) выполнить выборку материалов, но получается очень длинная строка и мускул ругается "Got a packet bigger than 'max_allowed_packet' bytes".
...
Рейтинг: 0 / 0
Проблемы с запросом
    #39493932
Jude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor ChubenkoПробовал сначала выбрать первым запросом айдишки категорий, сформировать строку и во втором запросе через c.id IN (...) выполнить выборку материалов, но получается очень длинная строка и мускул ругается "Got a packet bigger than 'max_allowed_packet' bytes".
Igor Chubenko
Код: sql
1.
LIMIT 0, 100




?

при выборе ПЕРВЫХ 100 записей из списка ид - получается слишком длинная строка ?

можно:

1) разбить на порции и тянуть порциями. например 1000 ид обычно хватает на IN запрос
2) сделать сортировку на клиенте :)

не рационально, но видимо время в вашем случае не критично :)

можно пойти путем денормализации.

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

если ид у вас числовые - то вроде бы должно хорошо под этот запрос и сортироваться и ключик можно построить
а с ключем и выборка быстрее (если ключ не будет в 6 раз тяжелее самой таблицы :) )
и сортировка проще.
...
Рейтинг: 0 / 0
Проблемы с запросом
    #39494534
Igor Chubenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Длинная строка получается, если все ID категорий собрать в одну строку и потом ее подставить в запрос в WHERE-части, заменив этим "INNER JOIN".

Вариант сортировки на клиенте или "спец поля, которое их запретит к показу" - потребует модификации системы во многих местах, поэтому сначала хочу выяснить все возможные варианты на уровне базы.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблемы с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]