2013-05-07 116 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 2013-05-07 20:03:16

回答

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”是我列表中的一列,每行有这个信息动物||性别||数量>>动物||性别||数量>>动物||性别||数量>>动物||性别||数量等等等等 – 2013-05-07 20:11:09

0

我不会Concat的那些在一个SQL策LL,但其存储在不同的细胞:

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存储在你的原始表格中,而不是长文本,你甚至可以加入我的select作为子选择。 – flaschenpost 2013-05-07 20:14:04

+0

我设法做到以下代码,但它显示如下:
$ animais = array($ array);
的foreach($ animais为$ linha)
{$ GRUPO [$ linha [0]] [] = $ linha [1];}
的foreach($ GRUPO为$ X => $ y)的
{$总数='';
$ col1 [] = $ x;
$ col2 [] = array_sum($ y);
$ total = array_sum($ y);}
echo $ x。“ - ”。$ genero [0]。“ - ”。$ total。“
”;}
我不想要名称要重复
鼠标 - 女性 - 32
鼠标 - 女性 - 77
仓鼠 - 男 - 168
仓鼠 - 男 - 168
2013-05-07 20:37:32

+0

分裂和在PHP分组阵列将比MySQL中的分组要慢得多,并且如果数据来自外部,您可以在存储之前简单地分割它们。 只要请求来过滤数据(例如,有人只想看到女性号码),问题就会变得更大。 你有没有隐藏或很好的理由不使用额外的表?也许这很容易解决,比手动分割数据更容易。 – flaschenpost 2013-05-07 20:53:30