Tablo matris birçok tabloya birçok MySQL

1 Cevap php

MySQL birçok tablo için bir çok var - bu gibi görünebilir:

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

vb

Sen numaralar (A = 1,3,4 ..), her zaman bitişik olmadığını fark edeceksiniz - Ben hiçbir veri sütunları ve satırları görmezden, bir matris tabloya bu dönüm hızlı yol arıyorum (örneğin A = 2). Ben geçiyor, php ayrı bir diziye her satırı alıyorum olarak ne çalışma var acı yavaş bir iç içe iken dizi A ve B maç dizi güncel indeks için anahtar eğer denetler döngü:

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;
}

Belki daha MySQL yan yapmak veya arama işlevini hızlandırmak var - I (örneğin eğer belirli bir satır sütun A = x VE Sütun B = y return true) iki-boyutlu bir dizi arama için bir yol bulmaya çalıştım.

Teşekkürler

1 Cevap

Eğer sütunlu veri içine satırı değişiyor çünkü o, SQL bitti zaman verileri dönme deniyor:

   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 deyimi bir ANAHTARI açıklamaya yapısına benzer, ama üzerinden düşme desteklemiyor. Bir sütun olarak çıktı istediğiniz her satır değeri için bir CASE deyimi tanımlamak gerekecek.