全部!我今天有一个棘手的问题,我想使用select DISTINCT语句既选择需要区分的行,又选择同一条语句(或我尝试过的方式?) 't /无法区分。我想要的结果是每个类名只有一个。目前它的输出是这样的:
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>";
}
}
}
}
}
答案 0 :(得分:2)
好吧,鉴于数据库的笨拙设计,您需要做的第一步是逐项列出诸如“教科书,文件夹,笔记本电脑”之类的列表[这样一来,每行只有三行而不是三行就行了] 。该操作的语义有点像SQL UNNEST,但可悲的是,数据库的“结构”(因使用该词而定,适合于您所拥有的)不适合使用该结构。我不确定没有某种形式的过程编码是否可以做到,所以最可能正确的答案是“只是忘了在一条SQL语句中这样做”。
您所说的DISTINCT可以 仅应用于 [逐项列出后的 。
应用DISTINCT后,您需要重新分组。也许可以用客户端语言来完成,但是那不是我想要的。
答案 1 :(得分:1)
一般来说,这不是一个非常可靠的数据库设计。最好对表进行规范化,并在每行中使用一个类名-书的组合。
如果不可能的话,我会@CommandHandler
public OrderAggregate(CreateOrderCommand command) {
apply(new OrderCreatedEvent(command.getOrderId()));
}
每个类的所有书籍,然后group_concat
将它们放入PHP端的数组,使结果唯一,然后将其重新连接到字符串:
explode