MySQL: “ВЫБОР исследовал бы больше, чем строки MAX_JOIN_SIZE”

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

Я знаю, что есть функция с именем max, но она не работает с многомерным массивом, подобным этому.

Вы можете обойти это с помощью array_column , что делает получение максимального значения очень простым:

$arr = [['message_id' => 1,
             'points' => 3],
        ['message_id' => 2,
             'points' => 2],
        ['message_id' => 3,
             'points' => 2]];

// max value
$max = max(array_column($arr, 'points'));

Получение ассоциативного ключа - это то, где он получает немного больше хитро, учитывая, что вам может понадобиться несколько ключей (если $max соответствует более чем одному значению). Вы можете сделать это с помощью анонимной функции внутри array_map и использовать array_filter для удаления значений null:

// keys of max value
$keys = array_filter(array_map(function ($arr) use ($max) {
    return $arr['points'] == $max ? $arr['message_id'] : null;
}, $arr));

Вывод:

array(1) {
  [0]=>
  int(1)
}

Если вы в конечном итоге набрали несколько ключей, но интересуетесь только первым найденным соответствием, просто обратитесь к $keys[0].

12
задан Jim Puls 3 June 2009 в 07:04
поделиться

2 ответа

Попробуйте выполнить запрос перед выполнением вашего select:

SET SQL_BIG_SELECTS=1

Действительно ли это выполняется для огромного набора данных? В противном случае эту проблему следует решить другим способом.

11
ответ дан 2 December 2019 в 04:17
поделиться

Эффект параметра задокументирован на http://dev.mysql.com/doc/refman/5.0 /en/server-system-variables.html#sysvar_max_join_size .

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

3
ответ дан 2 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: