如何从一个表行

时间:2016-08-13 23:03:18

标签: php mysql

我有以下MYSQL查询:

<?php

require "gospel_connect.php";


if(isset($_GET["keywords"])) {
  $keywords = $db->escape_string($_GET["keywords"]);
  $query = $db->query("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}%'");

  ?>

  <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
            $link = $r->the_link;

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

}

让我解释一下,查询是从db表data进行搜索,它包含以下列:iddatescripturesbooksscriptures_linkbooks_link

现在,查询工作正常。它返回相应的链接。问题是,如果 scripturesbooks都与关键字匹配,则只会显示一个结果。如果两者都有匹配,我希望两者都出现。否则,我只想要一组返回信息。 我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

问题是您希望从数据库表中的一行返回两行。在您的情况下,您应该使用UNION ALL来获得所需的结果:

SELECT *, scriptures_link AS the_link
FROM data WHERE scriptures LIKE '%{$keywords}%'
UNION ALL
SELECT *, books_link AS the_link
FROM data WHERE books LIKE '%{$keywords}%'

如果您将表格拆分为两个,一个用于经文,一个用于书籍,此查询也可用(在更改表名后)。这可能是一个更好的数据库设计。另一种可能性是为每个可能的匹配使用一行,然后添加一列(例如源)以标识数据源。