Php MySQL多对多表对表矩阵

Php MySQL多对多表对表矩阵,php,mysql,optimization,matrix,Php,Mysql,Optimization,Matrix,我在MySQL中有一个多对多表-它可以看起来像: A | B 1 | 1 1 | 2 1 | 3 3 | 4 3 | 5 4 | 1 4 | 2 4 | 5 等等 您会注意到这些数字并不总是连续的(A=1,3,4..)-我正在寻找将其转换为矩阵表的最快方法,忽略没有数据的列和行(例如A=2)。我的工作非常缓慢,因为我在php中将每一行放入一个单独的数组中,通过嵌套的while循环,检查数组a和数组B的键是否与当前索引匹配: while ($i <= $max_A) { if (i

我在MySQL中有一个多对多表-它可以看起来像:

A | B
1 | 1
1 | 2
1 | 3
3 | 4
3 | 5
4 | 1
4 | 2
4 | 5
等等

您会注意到这些数字并不总是连续的(A=1,3,4..)-我正在寻找将其转换为矩阵表的最快方法,忽略没有数据的列和行(例如A=2)。我的工作非常缓慢,因为我在php中将每一行放入一个单独的数组中,通过嵌套的while循环,检查数组a和数组B的键是否与当前索引匹配:

while ($i <= $max_A) {
    if (in_array($i, $array_A)) {
        print ("<tr>");

        while ($j <= $max_B) {
            if (in_array($j, $array_B)) {
                print ("<td>");
                if (in_matrix($i, $j, $array_A, $array_B)) {
                    print ("1");
                } else {
                    print ("0");
                }
                print ("</td>");
            }
            $j++;
        }
        print ("</tr>\n");
        $j = $min_B;
    }
    $i++;
}

function in_matrix($search_value_A, $search_value_B, $array_A, $array_B) {
    // Store the array keys matching search
    $keys_A = array_keys($array_A, $search_value_A);
    $keys_B = array_keys($array_B, $search_value_B);
    foreach ($keys_A as $value) {
        if (in_array($value, $keys_B)) {
            return true;
        }
    }
    return false;
}

while($i在SQL中完成时称为数据透视,因为您正在将行更改为列数据:

   SELECT t.a,
          MAX(CASE WHEN t.b = 1 THEN 'x' ELSE NULL END),
          MAX(CASE WHEN t.b = 2 THEN 'x' ELSE NULL END),
          MAX(CASE WHEN t.b = 3 THEN 'x' ELSE NULL END),
          MAX(CASE WHEN t.b = 4 THEN 'x' ELSE NULL END),
          MAX(CASE WHEN t.b = 5 THEN 'x' ELSE NULL END),
     FROM TABLE t
GROUP BY t.a

CASE语句在结构上与SWITCH语句类似,但不支持fall-through。您必须为要作为列输出的每一行值定义一个CASE语句。

循环开始之前,
$i
$j
是什么?