从不同的列中选择

时间:2017-01-20 22:59:38

标签: php mysql

我正在尝试从表中的不同列中进行选择,然后让MYSQL搜索字段值。我搜索过谷歌,但我设法获得的最多是使用IN和LIKE查询,这对我正在努力实现的目标没有多大帮助。

<?php
    //get rows query
    $query = $db->query("SELECT * FROM categories WHERE cat_parent = 'Root'");
    while($row = $query->fetch_assoc()){
        $cat_name = $row["cat_name"];
?>
                <li><a href="$id"><?php echo $cat_name; ?></a>
    </li>
<?php } ?>

<?php
    //get rows query
    $query = $db->query("SELECT * FROM categories WHERE cat_parent = cat_name");
    while($row = $query->fetch_assoc()){
         $cat_name = $row["cat_name"];
?>
   <li class="dropdown"><a href="$cat_id" class="dropdown-toggle" data-toggle="dropdown"><?php echo $cat_name; ?></a>
      <div class="dropdown-menu">
        <div class="dropdown-inner">
                        <ul class="list-unstyled">
                            <li><a href="$cat_id">$cat_name</a></li>
                        </ul>
              </li>
                      </div>
                     </div>
    </li>
<?php } ?>

此代码将从同一行中选择,这不是我需要的,我需要它从cat_name = cat_parent的所有表中进行选择,例如,如果cat parent是Electronics,而cat_name是笔记本电脑那么笔记本电脑必须显示在电子设备下面。

我希望我的问题很明确。

更新:我设法正确显示所有类别并进行过滤,除非它们互相重复。以下是新代码:

<?php
$query = $db->query("SELECT * FROM categories WHERE cat_parent = 'Root' AND cat_parent NOT IN (SELECT cat_name FROM categories)");
while($row = $query->fetch_assoc()){
    $parent_cat_name = $row["cat_name"];

    ?>
  <li>
    <a href="$id">
      <?php echo $parent_cat_name; ?>
    </a>
  </li>
  <?php
    $query1 = $db->query("SELECT * FROM categories WHERE cat_parent = '".$parent_cat_name."'");
    while($row = $query1->fetch_assoc()){
        $cat_name = $row["cat_name"];
        ?>
    <li class="dropdown">
      <a href="$cat_id" class="dropdown-toggle" data-toggle="dropdown">
        <?php echo $parent_cat_name; ?>
      </a>
      <div class="dropdown-menu">
        <div class="dropdown-inner">
          <ul class="list-unstyled">
            <li><a href="$cat_id"><?php echo $cat_name?></a></li>
          </ul>
        </div>
      </div>
    </li>
    <?php
    }
}
?>

我正在尝试查找MYSQL查询,以过滤所有类别为“Root”并且不在列cat_name中的类别。

2 个答案:

答案 0 :(得分:2)

根据您问题中的信息,这应该按照您的要求进行。

<?php
$query = $db->query("SELECT * FROM categories WHERE cat_parent = 'Root'");
while($row = $query->fetch_assoc()){
    $parent_cat_name = $row["cat_name"];

    ?>
  <li>
    <a href="$id">
      <?php echo $parent_cat_name; ?>
    </a>
  </li>
  <?php
    $query = $db->query("SELECT * FROM categories WHERE cat_parent = '".$parent_cat_name."'");
    while($row = $query->fetch_assoc()){
        $cat_name = $row["cat_name"];
        ?>
    <li class="dropdown">
      <a href="$cat_id" class="dropdown-toggle" data-toggle="dropdown">
        <?php echo $cat_name; ?>
      </a>
      <div class="dropdown-menu">
        <div class="dropdown-inner">
          <ul class="list-unstyled">
            <li><a href="$cat_id">$cat_name</a></li>
          </ul>
        </div>
      </div>
    </li>
    <?php
    }
}
?>

上面的代码将子类while()循环置于父循环内部,以便它将检索cat_parent与其所在的父类匹配的所有子类。

答案 1 :(得分:-1)

想出来。不得不创建另一个名为category_sub的MYSQL表,并在我的查询中做一些变通方法。所以最后的结果应该是

<Configuration status="warn">
  <Appenders>
    <File name="MyFile" fileName="logs/my.log">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
    </File>
    <File name="OtherFile" fileName="logs/other.log">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
    </File>
  </Appenders>
  <Loggers>
    <!-- all logging from this package and subpackages goes to OtherFile -->
    <!-- Note: set additivity=false or logging will also go to the root logger -->
    <Logger name="com.other.company" additivity="false">
      <AppenderRef ref="OtherFile"/>
    </Logger>
    <Root level="trace">
      <AppenderRef ref="MyFile"/>
    </Root>
  </Loggers>
</Configuration>

我知道这不是最好的方法,必须有一个更简单的方法(但这是我能做的最好的方法)。