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