Всем привет, вроде вопрос простой, но не могу сообразить как правильнее сделать, таблица с графиком для пользователя, там сохраняются значения каждые 3,5 секунд в зависимости от настроек, разрешаем сохранение 10 часов итого если 3 секунды получается 12000 записей, есть поле с датой, то есть нужно выбрать записи и удалить которые превышают это количество естественно старые. вот запрос выборки, но это одно значение, а нужно все SELECT * FROM temp WHERE user_id="" ORDER BY DATE DESC LIMIT 5000,1 не могу сообразить как это можно сделать
Ты не написал каков результат твоего запроса. "не могу сообразить" это конечно ценная информация. только лучше бы ты написал сообщение об ошибке если оно есть. Или если нет, то в чем проблема вообще. Код (SQL): WHERE user_id="" А это зачем? Если у тебя нет пользователя с пустым именем, то это лишнее условие. И вообще, строки в SQL надо писать в одинарных кавычках. Двойные имеют особый смысл, лучше не употребляй их. DATE в твоём случае это имя колонки? вообще это зарезервированное слово MySQL, поэтому лучше такие имена не давать, а если очень хочется, то писать его в косых кавычках как `date` --- Добавлено --- Записи превышают количество? нихт понимайт. Может быть ты хочешь удалить записи, созданные раньше, чем у запись, которая 5000-ая по порядку при сортировке по полю даты. Так? Созданы раньше ... это то же самое, что их поле id меньше чем... Если у тебя есть автоинкрементное поле id. Итого, получи саначала этот id как SELECT ID тратата хуйнане. Потом DELETE FROM temp WHERE id < найденное значение. Сообоажаешь теперь?
Форум не работал, поэтому ранее не отвечал, поля автоинкрементного нет, user_id я просто тут не указал например 10 (без разницы), мне нужно выбрать и удалить все записи принадлежащие данному пользователю с сортировкой по дате, и удалить старые которые превышают 5000 позиций, то есть пропустить первые 5000 в выборке
Ну, в принципе DELETE понимает ORDER, так что дерзай. Но, как написали выше, нужно удалять по более существенному признаку, чем кол-во записей. Можно по самому времени, т.к. ты знаешь примерное время появления записей и можешь сравнить с текущим временем за вычетом нужного интервала. Только что за имя DATE? Какого типа поле? Там что только даты хранятся? --- Добавлено --- Да, меня эта хрень стала сильно вымораживать. Еще немного и я забью на форум. Вообще позор: на php-форуме вылетают ошибки, да еще с технической детализацией
Это график, записи вносятся с текущим временем каждые 2 секунды поле DATE там TIMESTUMP, пишется время, но время не серверное, а текущее время пользователя с другой железки у которой свои часы, можно удалять конечно записи запросом типо "DELETE FROM temp WHERE user_id=:user_id AND date < :date - interval 4 HOUR", но каждые 2 секунды от каждого пользователя довольно ресурсоемко, таблица большая. Была идея делать с LIMIT и OFFSET, типо считать количество, если более сотни, то запросом выше и удалять, проблема в том что у DELETE нет возможности использовать OFFSET
Добрый день! Как постуают на сервер данные пользователей с "других железок" каждые 2 секунды? Тут нет узкого горлышка? Как часто происходит выборка данных (не удаление мусора, а например, "рисование графиков" )? Можно ли в Вашем случае организовать первичную обработку и накапление данных на стороне клиентoв и снизить нагрузку на сервер? Удачи!