Eğer GREATEST
a> işlevi gibi bir şey mi arıyorsunuz? Örneğin:
SELECT id, GREATEST(col1, col2, col3)
FROM tbl
WHERE ...
Sütun adlarını almak için CASE
a> deyimi ile birleştirin:
SELECT id, CASE GREATEST(COALESCE(`1`, -2147483646), COALESCE(`2`, -2147483646), COALESCE(`3`, -2147483646))
WHEN `1` THEN 1
WHEN `2` THEN 2
WHEN `3` THEN 3
ELSE 0
END AS maxcol
FROM tbl
WHERE ...
Bu hoş değil. Bill Karwin önerisini takip ve normalleştirmek, ya da sadece PHP bu dikkat çekmek için daha iyi yaparım.
function findcol($cmp, $arr, $cols=Null) {
if (is_null($cols)) {
$cols = array_keys($arr);
}
$name = array_shift($cols);
foreach ($cols as $col) {
if (call_user_func($cmp, $arr[$name], $arr[$col])) {
$name = $col;
}
}
return $name;
}
function maxcol($arr, $cols=Null) {
return findcol(create_function('$a, $b', 'return $a < $b;'), $arr, $cols);
}