Php 如何同时使用独立行和非独立行

Php 如何同时使用独立行和非独立行,php,mysql,Php,Mysql,全部!今天我有一个有点棘手的问题,我想使用select DISTINCT语句来选择一个需要区分的行,但也可以在同一个语句中选择一个不需要/不能区分的行(或者像我尝试过的那样)。我想要的结果是每个类名只有一个。目前它的输出如下: English: textbook, folder, laptop English: textbook Media: textbook, folder English: textbook, folder English: textbook, folder Art:

全部!今天我有一个有点棘手的问题,我想使用select DISTINCT语句来选择一个需要区分的行,但也可以在同一个语句中选择一个不需要/不能区分的行(或者像我尝试过的那样)。我想要的结果是每个类名只有一个。目前它的输出如下:

English: textbook, folder, laptop
English: textbook
Media:   textbook, folder
English: textbook, folder
English: textbook, folder
Art:     textbook
这就是我希望它输出的方式:

English: textbook, folder, laptop
Media:   textbook, folder
Art:     textbook
这是数据库的布局:

|ID|classname|Book  
|49|English  |textbook, folder, laptop
|50|English  |textbook  
|53|Media    |textbook, folder 
|54|English  |textbook, folder 
|55|Art      |folder 
我显然对php非常陌生,因此任何帮助都将不胜感激

这是我目前的做法:

$sql = "SELECT DISTINCT classname FROM classes ORDER BY Due;";
$result1 = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result1);
if ($resultCheck > 0){
    while ($row = mysqli_fetch_assoc($result1)){
        $classname = $row["classname"];

        if ($classname == "English"){
            $newName = $classname;
            $sql = "SELECT Book FROM classes WHERE Book='$newName';";
            $result1 = mysqli_query($conn, $sql);
            $resultCheck = mysqli_num_rows($result1);

            if ($resultCheck > 0){
                while ($row = mysqli_fetch_assoc($result1)){
                    $materials = $row["Book"]; 
                    echo "<div class='subname'>$newName:";
                    echo "<div class='wow'>$materials</div>";
                    echo "</div><br>";
                }

            }
        }
    }
}
$sql=“按到期顺序从类中选择不同的类名;”;
$result1=mysqli\u查询($conn,$sql);
$resultCheck=mysqli_num_行($result1);
如果($resultCheck>0){
而($row=mysqli\u fetch\u assoc($result1)){
$classname=$row[“classname”];
如果($classname==“英语”){
$newName=$classname;
$sql=“从类中选择Book=”$newName“;”;
$result1=mysqli\u查询($conn,$sql);
$resultCheck=mysqli_num_行($result1);
如果($resultCheck>0){
而($row=mysqli\u fetch\u assoc($result1)){
$materials=$row[“Book”];
echo“$newName:”;
回声“$materials”;
回声“
”; } } } } }
好吧,鉴于数据库的糟糕设计,您需要做的第一步是逐项列出您的列表,如“教科书、文件夹、笔记本电脑”[这样您就可以用一个项目获得三行,而不是一行三个项目]。该操作的语义有点像SQLUNNEST,但遗憾的是,数据库的“结构”(只要使用该词适合您所拥有的内容)不适合使用它。我不确定如果没有某种形式的过程编码,它是否可以实现,因此最可能正确的答案是“忘记在一条SQL语句中实现这一点”

您所称的DISTINCT只能在逐项列出后应用于[您得到的结果]


应用DISTINCT后,需要重新分组。也许可以用客户端语言完成,但这不是我的拿手好戏。

好吧,考虑到数据库的糟糕设计,你需要做的第一步是逐条列出你的列表,比如“教科书、文件夹、笔记本电脑”[这样你就可以用一个项目得到三行,而不是一行三个项目]。该操作的语义有点像SQLUNNEST,但遗憾的是,数据库的“结构”(只要使用该词适合您所拥有的内容)不适合使用它。我不确定如果没有某种形式的过程编码,它是否可以实现,因此最可能正确的答案是“忘记在一条SQL语句中实现这一点”

您所称的DISTINCT只能在逐项列出后应用于[您得到的结果]


应用DISTINCT后,需要重新分组。也许可以用客户端语言完成,但这些不是我喜欢的。

一般来说,这不是一个非常健壮的数据库设计。您最好规范化您的表,并在每一行中使用一个类名簿组合

如果不可能,我将
对每个类的所有书籍进行分组,然后
将它们分解成PHP端的数组,使结果唯一,并将其连接回字符串:

$sql = "SELECT classname, GROUP_CONCAT(book SEPARATOR ', ') AS materials FROM classes GROUP BY classname";
$result = mysqli_query($conn, $sql);

while ($row = mysqli_fetch_assoc($result)) {
    $classname = $row["classname"]; 
    $materials = $row["materials"];
    $materials = implode(',', array_unique(explode(', ', $materials)));
    echo "<div class='subname'>${classname}:";
    echo "<div class='wow'>$materials</div>";
    echo "</div><br/>";
}
$sql=“按类名从类组中选择类名、组(书本分隔符“,”)作为材料”;
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u assoc($result)){
$classname=$row[“classname”];
$materials=$row[“materials”];
$materials=内爆(“,”,数组_唯一(爆炸(“,”,$materials));
回显“${classname}:”;
回声“$materials”;
回声“
”; }
一般来说,这不是一个非常健壮的数据库设计。您最好规范化您的表,并在每一行中使用一个类名簿组合

如果不可能,我将
对每个类的所有书籍进行分组,然后
将它们分解成PHP端的数组,使结果唯一,并将其连接回字符串:

$sql = "SELECT classname, GROUP_CONCAT(book SEPARATOR ', ') AS materials FROM classes GROUP BY classname";
$result = mysqli_query($conn, $sql);

while ($row = mysqli_fetch_assoc($result)) {
    $classname = $row["classname"]; 
    $materials = $row["materials"];
    $materials = implode(',', array_unique(explode(', ', $materials)));
    echo "<div class='subname'>${classname}:";
    echo "<div class='wow'>$materials</div>";
    echo "</div><br/>";
}
$sql=“按类名从类组中选择类名、组(书本分隔符“,”)作为材料”;
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u assoc($result)){
$classname=$row[“classname”];
$materials=$row[“materials”];
$materials=内爆(“,”,数组_唯一(爆炸(“,”,$materials));
回显“${classname}:”;
回声“$materials”;
回声“
”; }
不清楚你在问什么。请重新表述您的问题,向我们展示清晰的示例输入表数据,以及准确的预期输出和您对那里发生的事情的最佳描述。据我所见,PHP代码在这里甚至可能没有任何相关性,假设SQL本身就可以完成您想要的工作。
English:tupbook,folder,laptop
&
English:tupbook
。当这些行是
英语:教科书,音频CD
英语:教科书,文件夹,笔记本电脑
时,你会期望什么?@TimBiegeleisen嘿,很抱歉混淆了,基本上我想要的是“类名”只重复一次,即:;英语,数学,艺术不是英语,英语,数学,英语,艺术,数学与PHP无关OP@guradioPHP可以用来解决这个问题,但是是的,我也认为这应该是一个数据库问题。不清楚你在问什么。请重新表述您的问题,向我们展示清晰的示例输入表数据,以及准确的预期输出和您对那里发生的事情的最佳描述。从我所看到的,PHP代码在这里甚至可能没有任何相关性,假设SQL本身可以完成您想要的工作。
English:tupbook,folder,laptop
&
English:tupbook
不是distinc