2008-12-08 10 views
2

Каков правильный способ получения максимальных значений всех столбцов в таблице с одним запросом? Благодарю.Запрос MySQL для max() всех столбцов

Уточнение: тот же запрос должен работать в любой таблице, то есть имена столбцов не должны быть жестко закодированы в нем.

ответ

0

Вы собираетесь должны сделать это в два этапа - один, чтобы получить структуру таблицы, а затем на втором этапе для получения максимальных значений для каждого

В PHP:

$table = "aTableName"; 
$columnsResult = mysql_query("SHOW COLUMNS FROM $table"); 

$maxValsSelect = ""; 
while ($aColumn = mysql_fetch_assoc($columnsResult)) { 
    if (strlen($maxValsSelect) > 0) { 
    //Seperator 
    $maxValsSelect .= ", "; 
    } 

    $maxValsSelect .= "MAX(" . $aColumn['Field'] . ") AS '" . $aColumn['Field'] . "'"; 
} 

//Complete the query 
$maxValsQuery = "SELECT $maxValsSelect FROM $table"; 
$maxValsResult = mysql_query($maxValsQuery); 

//process the results.... 
5
SELECT max(col1) as max_col1, max(col2) as max_col2 FROM `table`; 
+0

Я согласен с gnud – Samiksha 2008-12-08 10:36:55

+0

Есть ли запрос, который может быть применен к любой таблице? То есть если я не знаю, какие столбцы содержат таблицу заранее. – dpq 2008-12-08 10:37:24

0

Я думаю (но был бы рад показать неправильно), что вы должны знать, по крайней мере, количество столбцов в таблице, но вы можете сделать:

select max(c1),max(c2),max(c3),max(c4),max(c5) 
from (
    select 1 c1, 1 c2, 1 c3, 1 c4, 1 c5 from dual where 0 
    union all 
    select * from arbitrary5columntable 
) foo; 

Очевидно, что вы теряете любые преимущества индексации.