簡體   English   中英

如何同時使用DISTINCT行和非DISTINCT行

[英]How to both use a DISTINCT row and a non DISTINCT row

所有! 我今天有一個棘手的問題,我想使用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>";
                }

            }
        }
    }
}

好吧,考慮到數據庫笨拙的設計,您需要做的第一步是逐項列出諸如“教科書,文件夾,筆記本電腦”之類的列表(這樣一來,每行只有三行,而不是三行)。 該操作的語義有點像SQL UNNEST,但可悲的是,數據庫的“結構”(因使用該詞而定,適合於您所擁有的)不適合使用該結構。 我不確定沒有某種形式的過程編碼就可以做到,因此最有可能正確的答案是“只是忘了在一個SQL語句中這樣做”。

您所謂的DISTINCT 只能 在逐項列出之后 應用於 [獲得的結果]。

應用DISTINCT之后,您需要重新分組。 也許可以用客戶端語言來完成,但是那不是我要的。

一般而言,這不是一個非常可靠的數據庫設計。 您可以更好地規范化表,並在每行中使用一個類名-書的組合。

如果這不是一個可能性,我會group_concat每類中的所有書籍,然后explode他們在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/>";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM