Php 在MySQLi Select/Like搜索中排除重复返回

Php 在MySQLi Select/Like搜索中排除重复返回,php,mysqli,Php,Mysqli,在过去的几天里,我学到了很多,但如何排除重复记录让我感到困惑 使用标题搜索按钮搜索“abba” 2返回的结果 请注意,它是另一张光盘上的副本 我怎么才能展示第一次发现的呢? 这只是一个例子:有100个重复,这是正常的。它们只是不同的光盘组。然而,Sound Choice和DK卡拉OK是不同的录音标签,不是重复的。因此,只有当光盘ID以相同代码开始时才复制-即DK088和DK056是一个复制品,但DK088和SC5101不是一个复制品,如果相同的艺术家和标题。。。或者比较品牌可能更容易 这是我目

在过去的几天里,我学到了很多,但如何排除重复记录让我感到困惑

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

请注意,它是另一张光盘上的副本

我怎么才能展示第一次发现的呢? 这只是一个例子:有100个重复,这是正常的。它们只是不同的光盘组。然而,Sound Choice和DK卡拉OK是不同的录音标签,不是重复的。因此,只有当光盘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

因为只有两个第一个字母mather,所以应该使用

SELECT DISTINCT LEFT(discId , 2) FROM yourTable

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

好吧,在做了更多的研究之后。。。似乎我需要使用内部连接

select DISTINCT ID, Title, Brand from 1KaraokeDJ where Title like '%$searchterm%' AS temp
select * from 1KaraokeDJ inner join temp on 1KaraokeDJ.ID=temp.ID
但我仍然不知道如何正确地写这个。。。 select distinct仅返回部分数据。 我需要选择*才能使用其余的数据。 因此,如果我用ID上的*连接unique,结果应该是所有不是dupe的数据。理论上我认为这是正确的

那么,如何使我的理论与我的原始代码相吻合呢

<?php 
$searchresults=$db->query("select * from 1KaraokeDJ where Title like '%$searchterm%' order by Artist limit 100");

            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 } }?>



这不是一个广告。。。只是不知道用什么更好的方式来举我的例子。我正在努力学习如何建立自己的网站搜索数据库我很抱歉…我以为这是垃圾邮件。我看到的示例使用JavaScript或其他库,我尝试只使用php和MySQLi。另外,我真的只是在学习,我已经花了好几天的时间学习基本的东西。现在我进入了一个搜索的领域。。。我注意到您可以在selects中进行选择,这让我感到困惑。“从1KaraokeDJ中选择不同的品牌,其中艺术家(如“%$searchterm%”)|标题(如“%$searchterm%”)按艺术家排序,标题限制100”-只返回每个品牌的1个,而不返回记录集的其余部分。看到上面的网站,点击测试按钮…好的,你们搜索Abba,你们想要所有的标题,但每个记录集只有一次?这是正确的吗?如果是,那么您需要在title和discId字段上进行区分。因此,只有来自SC或DK的歌曲,您才能获得相同的歌曲两次。数据库如下所示:ID、光盘、曲目、艺术家、标题、品牌。ID是唯一的主键,Disc/Artist/Title varchar和Brand是6个值中的1个。所以搜索标题“abba”会返回来自同一品牌的2条记录。这是一个不必要的欺骗。。。如果来自不同的品牌,那么就不是一个复制品。我如何检索其余的数据?Select distinct仅返回请求的值-我需要所有数据-Select*