php - 排除 MySQLi Select/Like 搜索中的重复返回

标签 php mysqli

过去几天我学到了很多东西,但弄清楚如何排除重复记录让我感到困惑......

http://1KaraokeDJ.com

使用标题搜索按钮搜索“abba” 返回 2 个结果

请注意,它是在不同光盘上的重复项。

如何只显示第一个找到的内容? 这只是 1 个例子:有数百个重复项,这是正常的。它们只是不同的光盘集。然而,Sound Choice 和 DKKaraoke 是不同的唱片公司,并非重复。因此,仅当光盘 ID 以相同代码开头时才重复 - 即 DK088 和 DK056 是骗局,但如果艺术家和标题相同,则 DK088 和 SC5101 不是骗局...或者比较品牌可能更容易。

这是我当前的代码:

<?php
  include("connect.php");
  require_once 'Mobile_Detect.php';
  $detect = new Mobile_Detect;
  ini_set('session.cookie_lifetime',900);
  ini_set('session.gc_maxlifetime',900);
  session_start();
  if(isset($_POST['searchbtn'])) { $_SESSION['searchterm']=$_POST['searchterm']; }
?>
<html>
  <head>
    <title>1KaraokeDJ.com Search</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <div class="container">
      <form method="post">
        <p><code>
          <img src="top1.jpg" /><br>
          <?php if ($detect->isMobile()) { echo("Mobile Device Detected"); } else { echo("Desktop Browser Detected"); } ?>
        </code></p>
        <p>
          <?php if(isset($_SESSION['searchterm'])) { ?>
            <input name="searchterm" type="search" value="<?php echo $_SESSION['searchterm'];?>" class="search" />
          <?php } else { ?>
            <input name="searchterm" type="search" placeholder="Enter Search Terms Here"  class="search" />
          <?php } ?>
        </p>
        <p>
          <input name="searchbtn" type="submit" id="searchbtn" class="hiddenbutton" value="Karaoke Search" />
          <input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Artist Search"  />
          <input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Title Search"  />
          <input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Disc ID Search"  />
        </p>
        <hr style="width:100%">
        <?php if(isset($_SESSION['searchterm'])) {
          if(($_SESSION['searchterm']!="")) {
            $searchterm=strtoupper($_SESSION['searchterm']);
            switch ($_POST['searchbtn']) {
              case 'Karaoke Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Artist like '%$searchterm%' || Title like '%$searchterm%' || Disc like '%$searchterm%' order by Artist, Title limit 100");
                break;
              case 'Artist Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Artist like '%$searchterm%' order by Title, Disc limit 100");
                break;
              case 'Title Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Title like '%$searchterm%' order by Artist, Disc limit 100");
                break;
              case 'Disc ID Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Disc like '%$searchterm%' limit 100");
                break;
            }           
            if(mysqli_num_rows($searchresults) > 0) {
              while($descri=mysqli_fetch_object($searchresults)) { ?>
                <div class="reslt">
                  <h3 id="results">
                    <?php
                      echo str_ireplace($searchterm, '<span class="highlight">'.$searchterm."</span>", $descri->Artist);
                      echo " - ";
                      echo str_ireplace($searchterm, '<span class="highlight">'.$searchterm."</span>", $descri->Title);
                    ?>
                  </h3>
                  <p class="Description">
                    <?php
                      echo $descri->Brand; echo " - ";
                      echo str_ireplace($searchterm, '<span class="highlight">'.$searchterm."</span>", $descri->Disc);
                      echo " - "; echo $descri->Track;
                    ?>
                  </p>
                  <hr>
                </div>
              <?php } ?>
            <div class="reslt">
              <h3 id="results"><?php echo mysqli_num_rows($searchresults) ?> Results</h3>
              <?php if(mysqli_num_rows($searchresults) >= 100) { ?>
                <p class="Description highlight">Showing Up To 100 Results<br>Try Refining Your Search</p>
              <?php } ?>
            </div>
          <?php   } else { ?>
            <div class="reslt">
              <h3 id="results">Nothing Found!</h3>
              <p class="Description highlight">Try Changing Your Search Terms<p>
              <?php if ($_POST['searchbtn'] == "Disc ID Search" ) { ?>
                Chartbuster = CBxxx<br>
                DKKaraoke = DKxxx<br>
                Karaoke Hits = KHxxx<br>
                Sound Choice = SCxxx<br>
                Sunfly = SFxxx
              <?php } ?>
            </div>
          <?php }
        } } ?>
      </form>
      <hr>
      <code>&copy; D &amp; C Entertainment 2003 - 2015</code>
    </div>
  </body>
</html>

最佳答案

尝试使用

SELECT DISTINCT discId FROM youTable WHERE itMatchsYourField ORDER BY artist

这只会返回您唯一的 DiscId

所以你最终不会得到两次相同的 DK。现在在您的示例中您有 2 个 DKXXX

由于只有 2 个首字母,您应该使用类似

SELECT DISTINCT LEFT(discId , 2) FROM yourTable

这样你就不会得到两次DK,你会得到SC或DK以及第一个出现的

关于php - 排除 MySQLi Select/Like 搜索中的重复返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33727204/

相关文章:

php - MySql + oop PHP - 我应该如何使用 mysql?

php - 我从 phpmyadmin 中删除了所有用户,现在它说 '#1045 - Access denied for user ' root' @'localhost'(使用密码 : NO)'

php - 通过 php-deployer 部署后无需密码重新加载 php-fpm

php - 项目从本地主机移动到第三方主机 : CodeIgniter Database Class not returning query results, 但 MySQLI 确实如此

php - 将 PHP 数组插入 MySQL,并将表作为变量或动态表

php - 使用MySql数据库用php登录

php - 从数据库检索图像并更新图像或上传另一个文件

php - sql 查询返回一个值,但 php 上的 $result 始终是一个空数组

php - MySQLi 打印行

php - 使用php显示两个不同表的数据