查询显示类别和子类别

时间:2016-07-12 20:16:57

标签: php mysql sql left-join

我想显示CATEGORIES,然后在鼠标悬停时显示SUBCATEGORIES。我有2张桌子:

create table categorias (
`idCategoria` int NOT NULL PRIMARY KEY,
`nomCategoria` varchar (55) NOT NULL,
`desCategoria` varchar (255),
`tipoCategoria` int (2),
`fotoCategoria` varchar (55),
`metaTiCategoria` varchar (255),
`metaDesCategoria` varchar (255),
`keywordsCategoria` varchar(100)
) 

CREATE TABLE IF NOT EXISTS `subcategoria` (
  `idSubcate` int(3) NOT NULL AUTO_INCREMENT,
  `nomSubcate` varchar(55) NOT NULL,
  `fotoSubcate` varchar(255) DEFAULT NULL,
  `metaTiSubcate` varchar(255) DEFAULT NULL,
  `metaDesSubcate` varchar(255) DEFAULT NULL,
  `keywordsSubcate` varchar(255) DEFAULT NULL,
  `tipoSubcate` int(1) DEFAULT NULL,
  `cateSubcate` int(3) DEFAULT NULL,
  PRIMARY KEY (`idSubcate`))

PHP代码:

 <ul class="grid cs-style-4">
    <?
      $cate = 'communit_new_site_2016.categorias';
      $qry = ("SELECT * 
        from $cate
        where $cate.tipoCategoria = 1 or $cate.tipoCategoria=3
        ORDER BY $cate.nomCategoria
       ");
      $rst = mysql_query($qry);
      $tN = mysql_num_rows($rst);
      $cN = 1;
      ?>
      <?
          while($categoria = mysql_fetch_assoc($rst)) {


      ?>
      <li class="col-xs-12 col-sm-12 col-md-3">
      <div class="col-xs-12 col-sm-12 col-md-12 text-center">
      <figure>
        <div><img src="<?= $categoria['fotoCategoria'] ?>" alt="<?= $categoria['nomCategoria'] ?>"></div>
        <figcaption class="subcate">
         <?
            $sub = 'communit_new_site_2016.subcategoria';
            $catein = 'communit_new_site_2016.categorias';
            $qry1 = ("SELECT nomSubcate 
              from $sub

              ORDER BY $sub.nomSubcate
             ");
            $rst1 = mysql_query($qry1);
            $tN1 = mysql_num_rows($rst1);
            $cN1 = 1;
      ?>
      <?
          while($subcate = mysql_fetch_assoc($rst1)) {


      ?>
         <span> <?= $subcate['nomSubcate']?></span>
          <?

      if($cN1 != $tN1) {
      ?>

      <?
          }
      $cN1++;
      }
      ?>     
        </figcaption>
      </figure>
      </div>
      <div class="col-xs-12 col-sm-12 col-md-12 text-center">
              <a href=""><span class="caption"><?=$categoria['nomCategoria']?></span></a>
            </div>
    </li>
      <?

      if($cN != $tN) {
      ?>

      <?
          }
      $cN++;
      }
  ?>    
  </ul>

该网页为www.communita.com.mx/interior.php。 此外,有两种类型:室内(室内)和室外(室外)。这就是我在室内和室外使用tipoCategoria = 1(室内)和3的原因。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这是我如何使用左连接执行此操作。我没有对此进行测试,因为我没有您的数据库,但它应该向您展示我的方法的一般概念:

首先,执行查询并将行读入按类别ID分组的多维数组:

<?php
$cate = 'communit_new_site_2016.categorias';
$sub = 'communit_new_site_2016.subcategoria';
$qry = ("SELECT idCategoria, nomCategoria, fotoCategoria, idSubcate, nomSubcate
         FROM $cate c LEFT JOIN $sub s ON c.idCategoria = s.cateSubcate
         WHERE tipoCategoria = 1 OR tipoCategoria = 3 ORDER BY nomCategoria, nomSubcate");
$rst = mysql_query($qry);
while ($row = mysql_fetch_assoc($rst)) {
    // use the category id as a key here to group the array

    // these two values will just overwrite with the same thing if they're repeated
    $categorias[$row['idCategoria']]['nomCategoria'] = $row['nomCategoria'];
    $categorias[$row['idCategoria']]['fotoCategoria'] = $row['fotoCategoria'];

    // the subcategory will be added to an inner array
    $categorias[$row['idCategoria']]['subcategoria'][$row['idSubcate']] = $row['nomSubcate'];
}?>

在该结构中有一个数组之后,输出您想要获取的HTML会更容易。

<ul class="grid cs-style-4">
<?php foreach ($categorias as $categoria): ?>
    <li class="col-xs-12 col-sm-12 col-md-3">
        <div class="col-xs-12 col-sm-12 col-md-12 text-center">
            <figure>
                <div>
                     <img src="<?= $categoria['fotoCategoria'] ?>" 
                          alt="<?= $categoria['nomCategoria'] ?>">
                </div>
                <figcaption class="subcate">
                    <?php foreach ($categoria['subcategoria'] as $id => $subcategoria): ?>
                        <span><?= "$id: $subcategoria" ?></span>
                    <?php endforeach ?>
                </figcaption>
            </figure>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12 text-center">
            <a href=""><span class="caption"><?= $categoria['nomCategoria']?></span></a>
        </div>
    </li>
<?php endforeach ?>
</ul>