, , PHP, , , , , .
4 / .
GROUP_CONCAT 1,2,3,4, . , FIND_IN_SET. col , ELT().
SELECT
ELT(FIND_IN_SET(1,rand_indexes),col1,col2,col3,col4) as col1,
ELT(FIND_IN_SET(2,rand_indexes),col1,col2,col3,col4) as col2,
ELT(FIND_IN_SET(3,rand_indexes),col1,col2,col3,col4) as col3,
ELT(FIND_IN_SET(4,rand_indexes),col1,col2,col3,col4) as col4
FROM
(SELECT col1,col2,col3,col4,
(SELECT GROUP_CONCAT(i ORDER BY RAND()) as indexes FROM
(SELECT 1 as i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4)indexes
)as rand_indexes
FROM `table`
)T1
ORDER BY RAND() limit 4
sqlfiddle
UPDATE , , .
4 , 4 ...
SELECT T1.col1,T2.col2,T3.col3,T4.col4
FROM
(SELECT col1,@order1:=@order1+1 as i
FROM (SELECT col1 FROM `table` ORDER BY RAND() LIMIT 4) O1,(SELECT @order1:=0) initialize )T1
INNER JOIN
(SELECT col2,@order2:=@order2+1 as i
FROM (SELECT col2 FROM `table` ORDER BY RAND() LIMIT 4) O1,(SELECT @order2:=0) initialize )T2
ON T1.i = T2.i
INNER JOIN
(SELECT col3,@order3:=@order3+1 as i
FROM (SELECT col3 FROM `table` ORDER BY RAND() LIMIT 4) O1,(SELECT @order3:=0) initialize )T3
ON T1.i = T3.i
INNER JOIN
(SELECT col4,@order4:=@order4+1 as i
FROM (SELECT col4 FROM `table` ORDER BY RAND() LIMIT 4) O1,(SELECT @order4:=0) initialize )T4
ON T1.i = T4.i
sqlfiddle