PHP - MySQL tablodan büyük bir dizi alma sınırlı topakları

3 Cevap php

Diyelim ki böyle bir tablo var diyelim:

ID  Cat1  Cat2
1    a     red
2    b     red
3    c     blue
4    d     blue
5    e     blue
6    f     green
etc  etc   etc

Amaç Cat2 göre gruplar halinde kimliği ve CAT1 (benzersiz çift), split göstermektir. Çıkış kolay yolu, her Cat2 için ayrı bir MySQL sorgusu çalıştırmak için, ama sadece bir sorgu veri sürü kapma daha izleyiciye bir sayfayı görüntülemek için büyüklük daha fazla sorgular bir düzen üretir ve farklı Cat2 değerler bir sürü PHP ile ayrı dilimleme.

Benim biçimlendirme bitirdim var. Ama ben zor bir zaman $value[2] kullandıktan sonra $value = mysql_fetch_row($result) alınan dizideki üçüncü sütun değerine göre benim satır çıkışını sınırlamak için nasıl sergiyi yaşıyorum
$sql = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID"

Düz İngilizce (açıkça gerçek değil code) benzeyeceği:

$result = mysql_query($sql);

IF ($value[2] from $value = mysql_fetch_row($result) = "red")
    {
        echo "Red Group";
        WHILE ()
	{
		echo $value[0] and $value[1] for all the rows where Cat2 = red
	}
    }

IF ($value[2] from $value = mysql_fetch_row($result) = "blue")
    {
        echo "Blue Group";
        WHILE ()
	 {
		echo $value[0] and $value[1] for all the rows where Cat2 = blue
	 }
    }
etc

Mantıklı hepsi mi? Nasıl $result dizisinin üzerinden veri bu grupları kapmak mı?

Apparently is does NOT all make sense! :-) Here’s an example of desired output:

RED GROUP
1  a
2  b

BLUE GROUP
3  c
4  d
5  e

GREEN GROUP
6  f

etc

Teşekkür ederiz!

3 Cevap

Seni doğru anladıysam eğer ben bilmiyorum, ama bu sorunu çözecek?

Temel fikir, tüm satırlar aracılığıyla ve her zaman size döngü Cat2 son değeri kaydetmek olmasıdır. Eğer Cat2 değişiklikleri algılamak zaman, yeni bir Cat2 için "başlık" ekleyebilirsiniz. Ilk Cat2 göre sonuçları sıralamak Çünkü, bu sizin istediğiniz çıktı yaratacaktır.

$query = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID"
$result = mysql_query($query);
$last = "";
while ($line = mysql_fetch_row($result)) {
  if ($line[2] != $last) {
    echo $line[2] . ' Group';
    $last = $line[2];
  }
  echo $line[0] . ' ' . $line[1];
}

What you want to do is just limit the rows that your database will return using SQL's WHERE deyimi çok daha kolay.:

$sql = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID";
$result = mysql_query($sql, $link) or die('Error');

$last_group = '';

echo '<table>';

while (list($id, $cat1, $cat2) = mysql_fetch_row($result))
{
    if ($cat2 != $last_group)
    {
        echo '<tr><td colspan="2">'.$cat2.' group</td></tr>';
    }

    echo '<tr><td>'.$id.'</td><td>'.$cat1.'</td></tr>';

    $last_group = $cat2;
}

echo '</table>';

Muhtemelen bunu yapardı, söyleyeceğim

$result = array();
foreach($data as $row){
 if(isset($result[$row['Cat2']])){
   $result[$row['Cat2']][] = $row;
 } else {
   $result[$row['Cat2']] = array( $row );
 }
}

sadece çift çıkış istenen almak bu diziye döngü oluyor sonra Cat2 göre gruplanmış bir dizi verecek.