Внутри фрагмента кода, который я рефакторинг, цикл while перебирает набор результатов из запроса к базе данных и выполняет подмножество запросов.
В большинстве случаев эти циклы можно извлечь для выполнения меньшего количества запросов с большим набором переданных параметров.
Однако я не уверен, как обработать этот конкретный запрос, когда ORDER BY и LIMIT 1 делают немного сложнее понять, как его оптимизировать. Любые пункты приветствуются о том, как подходить к этому типу запроса:
Пример:
$e = array( ... );
foreach($e as $i=>j) {
$sql = "SELECT a FROM b WHERE c = '".(int)$j."' ORDER BY f LIMIT 1";
$res = $db->query($sql);
}
Возможным способом было бы выбрать без условий ORDER/LIMIT
и фильтрацию в PHP через циклы PHP, но только 1 запрос, но есть ли лучший способ уменьшить возвращаемый набор результатов?
EDIT:
Чтобы пояснить лучше, я добавлю еще немного информации. Если есть 5000 записей, которые в противном случае были бы возвращены в упрощенной структуре, указанной выше, то нам потребовалось бы 5000 в окончательном наборе результатов также после оптимизации запроса вне цикла. Предложение LIMIT 1 не позволяет сделать это во внешнем SQL, но я еще не нашел способ сделать это с помощью внутреннего или подзапроса. Именно этот элемент я хотел проверить в здравом уме с помощью лучшего / более опытного ума.
Любые указатели приветствуются!
Спасибо