【问题标题】:How to fetch all same value field like categories and its subcategories?如何获取所有相同的值字段,如类别及其子类别?
【发布时间】:2019-07-19 11:14:43
【问题描述】:

我实际上遇到了一个 sql 查询执行的问题,我无法按我的意愿执行。

简要说明我想要什么: 这是我的表结构-

| id | categoryname | nameofthing | 
| 1  |   category1  |    name 1   |
| 2  |   category2  |    name 2   |
| 3  |   category 3 |    name 3   |
| 4  |   category 1 |    name 4   |
| 5  |   category 1 |    name 5   |
| 6  |   category 3 |    name 6   |

而我想要显示的结果是这样的:

Category1 
 - Name 1
 - Name 4
 - Name 5
Category2
 - Name 2
Catergot3
 - Name 3

等等..

我想运行一个查询,首先获取所有相同的值类别名称,然后获取其值(nafeofthing),然后再次获取下一个相同的类别名称及其值。

请帮助我实现这一目标!

$query=mysql_query("SELECT * FROM thing WHERE tol_id='$bid' ORDER BY categoryname, name"); 
    if(mysql_num_rows($query) > 0){
    while($row=mysql_fetch_array($query)) {
    $categoryname = $row['categoryname'];
    $name = $row['name'];
    echo"
    <div class='stuff'>
    <p>".$categoryname."</p>
        <div id='rowstuff'>
            <div id='name'>".$tname."</div>
    </div>
    </div>
    ";
}

【问题讨论】:

    标签: php html mysql sql categories


    【解决方案1】:

    这最好在应用层完成,但你可以从查询中得到这个结果:

    select coalesce(concat('- ', nameofthing), categoryname)
    from ((select categoryname, null as nameofthing
           from thing t
          ) union all
          (select categoryname, nameofthing
           from thing t
          )
         ) t
    order by categoryname, (nameofthing = null) desc;
    

    【讨论】:

    • 这里有什么?是表名吗?
    • @AbhimanyuSharma 。 . . t 是表名。可悲的是,您的评论(“可悲的是它不起作用”)根本没有用。如果有错误,您应该指定它。如果它产生不正确的结果,你应该解释。
    • 然后是这样:代码返回并在其声明的位置出错 - mysql_num_rows() 期望参数 1 是资源,布尔值在.....
    • @AbhimanyuSharma 。 . .答案中没有明显的语法错误。我怀疑这是你的代码中的东西。
    • 我通过 SQL 执行检查了您在 phpmyadmin 中的代码,它确实有效,但结果不如预期,它显示了两次类别,一个带有它的 nameofthing,另一个没有它..
    【解决方案2】:
           <?php
            //use GROUP_CONCAT to CONCAT all name by comma(,) group by categoryname. 'thing' is your table name
            $query = "SELECT categoryname, GROUP_CONCAT(nameofthing) as 'name' FROM thing group by categoryname ORDER BY categoryname";
    
            $output ='';
        $query= mysqli_query($conn, $query); 
            if(mysqli_num_rows($query) > 0){
            while($row=mysqli_fetch_array($query)) {
            $categoryname = $row['categoryname'];
            $output.="<p>".$categoryname."</p>";
    
            //using explode split the name in array
            $name = explode(',', $row['name']);
    
            $output.="<div id='rowstuff'>";
    
            //iterate the name from array
            for($i=0;$i<count($name);$i++){
                 $output.= "<div id='name'>".$name[$i]."</div>";
            }
             $output.= "</div>";
        }
    }
    
        echo $output;
    

    OutPut 会是这样的

    https://www.screencast.com/t/ZWG7bqy0

    【讨论】:

    • 现在检查。我忘了在爆炸功能中添加,
    • 返回此错误:警告:mysql_num_rows() 期望参数 1 是资源,布尔值在.....
    • 只调试你的代码。它正在工作 - screencast.com/t/ZWG7bqy0
    • 使用带有连接参数的查询,例如 - $query= mysqli_query($conn, $query);我正在使用 mysqli_query,您可以使用 mysql_query 进行检查
    【解决方案3】:
    $query=mysql_query("SELECT * FROM thing WHERE tol_id='$bid' ORDER BY categoryname, name"); 
    $categories = [];
    if(mysql_num_rows($query) > 0){
        while($row=mysql_fetch_array($query)) {
            $categories[$row['categoryname']][] = $row['name'];
        }
    }
    if(!empty($categories)) {
        foreach($categories as $categoryName => $subCategories) {
            echo "<div class='stuff'>
                    <p>".$categoryName."</p>
                    <div id='rowstuff'>";
                    if(!empty($subCategories)) {
                        foreach($subCategories as $subCategory) {
                            echo "<div id='name'>".$subCategory."</div>";
                        }
                    }
            echo "</div></div>";
        }
    }
    

    【讨论】:

    • 我还想回显一些与子类别相关的其他数据,例如如果它是产品,那么它的价格等等,如何使用这个 foreach 循环来检索它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2016-02-04
    • 2011-09-26
    • 2021-12-22
    相关资源
    最近更新 更多