2013-05-07 5 views
2

У меня есть в моей таблице столбец, infoanimal:Группировка массив в PHP

RABBIT || Male || 15 
HAMSTER || Female || 10 
FROG || Male || 5 
RABBIT || Male || 40 
HAMSTER || Male || 4 
FROG || Male || 13 

У меня есть это в следующий момент:

$sql = "SELECT * FROM experimental"; 
$query5 = mysql_query($sql); 
while ($dados = @mysql_fetch_array($query)){ 
    $infoanimal = $dados["infoanimal"]; 
    $pesquisa = explode(">>", $infoanimal); 
    $num_pesq = count($pesquisa); 
    for($i=1;$i<$num_pesq;$i++){ 
     $dadosx3 = explode("||", $pesquisa[$i]); 
     $animal[0] = $dadosx3[0]; 
     $gender[0] = $dadosx3[1]; 
     $amount[0] = $dadosx3[5]; 
    } 
} 

Я хотел бы сделать следующее:

Animal || Male || Female || Sum 
HAMSTER || 4 || 10  || 14 
FROG || 18 || 0  || 18 
RABBIT || 40 || 0  || 40 
+0

Вы можете исправить свое форматирование, пожалуйста? Код отступа с 4 пробелами и убедитесь, что ему предшествует пустая строка. – dave

ответ

0
SELECT animal, 
     SUM(CASE gender WHEN 'male' THEN amount ELSE 0 END) AS male, 
     SUM(CASE gender WHEN 'female' THEN amount ELSE 0 END) AS female, 
     SUM(amount) AS `sum` 
FROM infoanimal 
GROUP BY 
     animal 
+0

«Infoanimal» - это столбец в моей таблице, каждая строка имеет эту информацию животное || пол || количество >> животное || пол || количество >> животное || пол >> количество >> животное || пол || количество >>, etc и т. д. и т. д. –

0

Я бы не стал контактировать с ними в одном sql-ce Л.Л., но хранить его в различных клетках:

create table animal_info (
    some_row_id int, 
    animal_name varchar, 
    animal_gender enum('Male','Female','Herma'), 
    number_animals int); 

и затем

SELECT 
    animal_name as animal, 
    sum(if(animal_gender = 'Male', number_animals, 0)) as male, 
    sum(if(animal_gender = 'Female', number_animals, 0)) as female, 
    sum(number_animals) as sum 
FROM 
    animal_info 
WHERE 
    some_row_id = <row of old entry> 
GROUP BY animal_name 
; 

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

+0

some_row_id хранится в вашей исходной таблице вместо длинного текста, и вы можете даже присоединиться к моему выбору в качестве подзапроса. – flaschenpost

+0

Мне удалось сделать следующий код, но он выглядит следующим образом:
$ animais = array ($ array);
Еогеасп ($ animais как $ Linha)
{$ Grupo [$ Linha [0]] [] = $ Linha [1];}
Еогеасп ($ Grupo, как $ х => $ у)
{$ total = '';
$ col1 [] = $ x;
$ col2 [] = array_sum ($ y);
$ всего = array_sum ($ у),..}
эхо $ х "-" $ Genero [0] "-" $ общая "
";...}
Я не хочу имена повторять
Mouse - Женщина - 32
Mouse - Женский - 77
Hamster - Male - 168
Hamster - Male - 168

+0

Нарезка и группируя массивы в PHP будет гораздо медленнее, чем группировка в MySQL, и если данные поступают извне, вы можете просто разбить их перед хранением. Как только приходит запрос на фильтрацию данных (например, кто-то хочет видеть только женские числа), проблема становится еще больше. У вас есть скрытые или веские причины не использовать лишний стол? Возможно, это решает легко, проще, чем вмешиваться в ручные сплит-данные. – flaschenpost

Смежные вопросы