Nasıl PHP kullanarak satır sürede mysql verileri görüntüleyebilir mi?

6 Cevap php

Ben bir müşteri her organizasyonda employess tüm detayları ile, var bütün örgütlerini gösteren MySQL veri var. Ben gibi bu isme karşı sadece bir kez tek bir hücre (satır aralığı) içinde yani her bir kuruluş ad ve bu örgütün tüm çalışanları listelemek istiyorum:

Org1     Emp1 Name, Emp1 Phone, Emp1 Address
         Emp2 Name, Emp2 Phone, Emp2 Address


Org2     Emp1 Name, Emp1 Phone, Emp1 Address
         Emp2 Name, Emp2 Phone, Emp2 Address

Her kuruluş için employess sayıda ileri bilinen, bu yüzden rowspan değerini ayarlama hakkında do'nt değil çünkü nasıl bu verileri görüntüler yok. Benzer şekilde nasıl diğer organizasyon için bir satır başlar? Ben iki sorgu yazmak zorunda mı?

Çok teşekkürler.

6 Cevap

Klasik.

Çözüm: Sadece bir önceki farklı ise adını görüntüler. Hatta (bir boş hücre tutmak) rowspan hakkında rahatsız edemez.

$currentOrg = '';
while ($row = mysql_fetch_object($query)) {
   if ($row->org != $currentOrg) {
      echo "$row->org".
   }
   $currentorg = $row->org;
}

En güzel ama o kadar basit değil.

Yapmak için doğru bir rowspan, önceden numarasını bilmeniz gerekir.

İşte size bırakır:

  • onlar değiştirene kadar değerleri sayma, iki sorgu sonucu yineleme
  • saymak için DB sunucu isteyen

Şahsen, ben yöntemi iki numara ile gitmek istiyorum. DB sunucuları satırları sayma ile oldukça verimli, bu muhtemelen çok daha hızlı görüntülemek için birçok satır olduğunda olacaktır.

O (muhtemelen orada kaç kuruluşlar bulmak için artı bir sorgu) bir her kuruluş için sorgu yapmak daha kolay (ama daha az etkili) olabilir.

Bunu yapmak için daha iyi bir yolu önceden diziye döngü olacaktır. Örneğin:

$sql = $mysqli->query('SELECT * FROM `organisation_members` ORDER BY `organisation` DESC');

if (!$sql || $sql->num_rows) {
    // No data
} else {
    $data = array();
    while ($row = $sql->fetch_assoc()) {}
        if (!array_key_exists($row['organisation'], $data)) {
            $data[$row['organisation']] = array();
        }
        $data[$row['organisation']][]['name'] = $row['name'];
        // ...
    }
    $sql->close();
    echo '<table>';
    foreach ($data as $org => $people) {
        $people_in_org = count($data[$org]) - 1;
        $counter = 0;

        echo '<tr>';
        echo '<td rowspan="' . $people_in_org + 1 . '">' . $org . '</td>';

        while ($counter < $people_in_org) {
            if (counter > 0) {
                echo '<tr>';
            }
            echo '<td>' . $people[$counter]['name'] . '</td>';
            // etc
            echo '</tr>';
        }
    }
    echo '</table>';
}

Org org değişiklikler, mevcut toplu baskı ve sonraki toplu tampon başlangıç ​​satırları, tampon aynı ise belleğini korumak için resultset tekrarlayabilirsiniz.

Ne Aşağıdaki örnekteki gibi PEAR'ın HTML_Table paketini kullanarak ilgili, ben de benzeri yoluyla Jrgns en TOPLAMASI sürümü

	<?php

	require_once "HTML/Table.php";




	$table = new HTML_Table(array('border'=>'1'));
	$bo=array(
		array('6','a2','a3','a4'),
		array('1','b2','b3','b4'),
		array('1','c2','c3','c4') ,
		array('2','c2','c3','c4') ,
		array('2','c2','c3','c4') ,
		array('4','c2','c3','c4') );

	foreach ($bo as $r => $borow)
		$table->addRow($borow);

	$rsFirst=0;
	$rsLen=0; 
	foreach ($bo as $r => $borow) {
		if ($r!=0 and $borow[0]!=$prevrow[0] ) {
			//jump in values
			$table->setCellAttributes ( $rsFirst,0, array('rowspan'=>$rsLen));
			$rsFirst=$r;
			$rsLen=0;
		}
		$prevrow=$borow;
		$rsLen++; 
		if ($r==sizeof($bo) - 1) {
			$table->setCellAttributes ( $rsFirst,0, array('rowspan'=>$rsLen));
		}
	}


	echo $table->toHTML();

	?>

Servas, boerl