Как удалить Duplicates In While Loop, если вы читаете каждое слово - PullRequest
0 голосов
/ 30 августа 2018

Как мне удалить дубликаты в этом фрагменте. Различная функция в запросе не будет работать, потому что вы читаете каждое слово в каждом цикле и добавляете в таблицу. Как я могу показать все отдельные данные для отображения в моей таблице

<?php
    $connect = mysqli_connect("localhost", "root", "", "dbProject");
    $output = '';
    if(isset($_POST["query"]))
    {
        $search = mysqli_real_escape_string($connect, $_POST["query"]);
        $SearchEach= explode(" ",$search);
        $output .= '<div class="table-responsive">
            <table class="table table bordered">
                            <tr>
                                <th>Book ID</th>
                                <th>Name</th>
                                <th>Author</th>
                                <th>Tags</th>
                                <th>Status</th>

                            </tr>';
        foreach($SearchEach as $value){
            $query = "
                SELECT * FROM tblProject 
                WHERE tyear >=YEAR(NOW())-30 AND (tags LIKE '%".$value."%'OR
                     tcname LIKE '%".$value."%' OR
                     author LIKE '%".$value."%' OR
                     status LIKE '%".$value."%')";
                $result = mysqli_query($connect, $query);
                while($row = mysqli_fetch_array($result))
                    {
                        $output .= '<tr>
                                <td>'.$row["tcno"].'</td>
                                <td>'.$row["tcname"].'</td>
                                <td>'.$row["Author"].'</td>
                                <td>'.$row["tags"].'</td>
                                <td>'.$row["status"].'</td>
                            </tr>';
                    }
            }
            echo $output;
    }
    ?>

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Предполагая, что значения tcno поля являются уникальными, вы можете использовать следующую логику, чтобы НЕ ПОКАЗАТЬ уже показанные записи

$processedRecrods = [];

foreach ($SearchEach as $value) {
    $query = "
        SELECT * FROM tblProject 
        WHERE tyear >=YEAR(NOW())-30 AND (tags LIKE '%" . $value . "%'OR
        tcname LIKE '%" . $value . "%' OR
        author LIKE '%" . $value . "%' OR
        status LIKE '%" . $value . "%')";

    $result = mysqli_query($connect, $query);

    while ($row = mysqli_fetch_array($result)) {

    //See if record with this tcno is already processed / displayed in table
    if (!in_array($row['tcno'], $processedRecrods)) {
            $output .= '<tr>
                            <td>' . $row["tcno"] . '</td>
                            <td>' . $row["tcname"] . '</td>
                            <td>' . $row["Author"] . '</td>
                            <td>' . $row["tags"] . '</td>
                            <td>' . $row["status"] . '</td>
                        </tr>';

            //Add tcno in the array of processed records
            $processedRecrods[] = $row["tcno"];
        }
    }
}

echo $output;
0 голосов
/ 30 августа 2018

Я бы перенес результаты в новый стек и использовал бы array_unique.

<?php
$newStack = [];

while ($row = mysqli_fetch_array($result)) {
    array_push($newStack, $row);
}

$newStack = array_unique($newStack);

foreach($newStack as $row) {
    $output .= "my html";
}
0 голосов
/ 30 августа 2018

Сначала сохраните только идентификаторы строк, найденных во время различных поисков. Затем удалите дубликаты идентификаторов. После этого для каждого уникального идентификатора извлекаются и отображаются соответствующие строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...