ürünleri kategorileri

2 Cevap php

Ben basit bir sorum var ama ben (İngilizce benim ilk dil değil) cevabını bulmak için kullanmanız gereken hangi terim bilmiyorum.

Ben gibi ürün ve kategori klasik bir veritabanı tasarımı var.

CREATE TABLE IF NOT EXISTS `a` (
  `id_a` int(11) NOT NULL auto_increment,
  `type` varchar(255) NOT NULL,
  PRIMARY KEY  (`id_a`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

CREATE TABLE IF NOT EXISTS `b` (
  `id_b` int(11) NOT NULL,
  `id_a` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY  (`id_b`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

B.id_a a.id_a bir yabancı anahtar nerede

Ben gibi tüm thoses bir hiyerarşi almak istiyorum

A VALUE 1

  • b_value_1
  • b_value_2

A VALUE 2

  • b_value_11
  • b_value_12

A VALUE 3

  • b_value_21
  • b_value_22
  • b_value_23

Istek değil meseleleri yok ama ben anwser bu tür almak:

VALUEOF-TABLE-A | VALUEOF-TABLE-B
A VALUE 1       | b_value_1
A VALUE 1       | b_value_2

ve benzerleri.

Benim şu anki kod gibi bir şeydir:

$categ = '';
while ($row = mysql_fetch_row ($ressource))
{
   if ($row['VALUEOF-TABLE-A']!=$categ) 
   { 
     $categ = $row['VALUEOF-TABLE-A']; 
     echo '<h3>', $categ, '</h3>';
   }
   echo '<h4>', $row['VALUEOF-TABLE-B'], '</h4>';
}

But I don't like much the idea of the categ variable, be it a string or an id. Is there an other way to get the data and display them?

İdeal olarak, aynı çocuklar için sadece tek bir düğüme sahip olan, bir ağaç nesne gibi i'de.

Ne istediğimi anladım umuyoruz.

2 Cevap

MySQL yabancı anahtarları ile çalışırken, yerine MyISAM ve InnoDB motorunu kullanmak gerekir.

B tablo anlayışında bir sorun var gibi görünüyor, id_b değil id_a, birincil anahtar olmalıdır.

Sorununuzu çözmek için, belki ilk id_a, sonra da id_a seçmek için tek seçim isteği yapmak listesini almak gerekir (id_b bir {[kullanılarak tekabül 3)]}.

EDIT: komut biraz daha sunum ile bu gibi görünmelidir:

$category_array = mysql_query("SELECT id_a, type FROM a");
while ($category = mysql_fetch_array($category_array))
{
    echo $category['type'];
    $product_array = mysql_query("SELECT * FROM b WHERE id_a = $id_a");
    while ($product = mysql_fetch_array($product_array))
    {
         echo $product['name'];
    }
}

Chico veren örnek doğru yolda olduğunu, ancak bir sorun var: birçok kategori varken, komut dosyası da verimsiz olduğu, birçok sorguları yürütmek olacaktır. Aşağıdaki örnek, çok daha etkilidir:

$categories = array();
$category_array = mysql_query("SELECT id_a, type FROM a");
while ($category = mysql_fetch_array($category_array))
{
    $category['products'] = array();
    $categories[$category['id_a']][] = $category;
}

$product_array = mysql_query("SELECT * FROM b");
while ($product = mysql_fetch_array($product_array))
{
    $categories[$product['id_a']]['products'][] = $product
}

foreach($categories as $category) {
    echo $category['type'];
    foreach ($category['products'] as $product) {
         echo $product['name'];
    }
}

Ek bir avantaj olarak, bu aynı zamanda çıkışından daha temiz veri alımını ayırır.