如何修复这个mysql查询?

时间:2016-08-12 04:02:49

标签: php mysql

我有以下MYSQL查询:

if(isset($_GET["keywords"])) {
  $keywords = $db->escape_string($_GET["keywords"]);
  $query = $db->query("SELECT * FROM data WHERE scriptures LIKE '%{$keywords}%' OR books LIKE '%{$keywords}%'");

  ?>

  <div class='result-count'>
    Found <?php echo $query->num_rows; ?> results.
  </div>
  <?php

  if($query->num_rows) {
    while($r = $query->fetch_object()) {
      ?>
        <div class='result'>
          <?php
            $scriptures_link = $r->scriptures_link;
            $books_link = $r->books_link;

          echo "<a href='$scriptures_link'> Hi </a> <br>";
          echo "<a href='$books_link'> Bye </a> <br>";
          ?>
        </div>
      <?php
    }
  }

}

我有两个不同的类别:scripturesbooks。 LIKE语句针对这两个组。因此,如果一行信息包含这两个项目的信息。因此,如果一个项目与LIKE语句匹配,但另一个项目不匹配,则两个项目都会显示在搜索结果中。如何将查询分开,一次只进行一次?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用Case语句。

SELECT *,
  CASE
    WHEN scriptures LIKE '%{$keywords}%' THEN scriptures_link
    WHEN books LIKE '%{$keywords}%' THEN books_link
  END as the_link
FROM data WHERE scriptures LIKE '%{$keywords}%' OR books LIKE '%{$keywords}%'"

然后回显$ r-&gt; the_link

如果有效,请告诉我。 (我没有测试过查询,但我认为是正确的。)

答案 1 :(得分:0)

我想你错过了这一行......

echo "<a href='$scriptures_link'> Hi </a> <br>";
      echo "<a href='$books_link'> Bye </a> <br>";

试试这个..

echo "<a href='".$scriptures_link."'> Hi </a> <br>";
      echo "<a href='".$books_link."'> Bye </a> <br>";

希望这有帮助...:D