У меня есть запрос, который выбирает десятки строк из базы данных mysql в зависимости от даты их добавления.Ошибка запроса PDO: 2013 Потерянное соединение с сервером MySQL во время запроса [Необходимая помощь по оптимизации]
Запрос работает, но часто встречается с ошибками и неэффективен. Примечание: таблица имеет около 10k + строк.
Вот вопрос, который я Засада:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2013 Lost connection to MySQL server during query' in somefile.php:49
Stack trace:
#0 somefile.php(49): PDOStatement->execute()
Вот запрос, который вызывает ошибку:
// Problematic Query
$query = $conn->prepare('SELECT *
FROM table_name
WHERE DATE(date_added) IN (
SELECT DATE(date_added) as creation_date
FROM table_name
GROUP BY creation_date DESC
)
ORDER BY id DESC
LIMIT :limit OFFSET :offset'
);
$query->bindValue(':limit', (int) trim($entrylimit), PDO::PARAM_INT);
$query->bindValue(':offset', (int) trim($offset), PDO::PARAM_INT);
$query->execute();
есть какие-либо предложения о том, как улучшить этот запрос?
Редактировать: В попытке, надеюсь, объяснить, что это делает: Его сбор списка уникальных дат создания, а затем использование этого, чтобы собрать все строки, которые имеют определенную дату создания. (Я использовал это в php-контуре, но это было очень медленно.)
Возможно ли соединение? – vee
@vinodadhikary - Внутренний запрос собирает список разных дат создания, и для каждого внешнего запроса выполняется и собирает строки на основе этой даты создания. Я не настолько образован в соединении в mysql, поэтому я не уверен, что он здесь полезен. –
@waterfountain Если все, что вы пытаетесь сделать, это найти строки, принадлежащие определенному create_date, почему бы вам просто не сделать 'WHERE creation_date =: date'? Или, если вы не знаете, что create_date просто забудет подзапрос и выполните 'ORDER BY creation_date' – Mike