2016-08-12 9 views
2

私は、次のMYSQLクエリを持っている:scripturesbooksこの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 
    } 
    } 

} 

は、私は2つの別々のカテゴリがあります。 LIKE文は、これらの両方のグループを対象としています。したがって、情報の1つの行にこれらの項目の両方に関する情報がある場合。したがって、一方の項目がLIKE文に一致し、他方の項目が一致しない場合、両方の項目が検索結果に表示されます。クエリを分割して一度に1つだけ行うにはどうすればよいですか?

+0

DISTINCTを試しましたか? SELECT DISTINCT * –

+0

@JohnEasleyはい、それは機能していません。 –

+0

両方のキーワードセットに一致する行が返されないようにすることはできませんか?いくつかのサンプルデータと期待される結果を与えることができますか? – SilicaGel

答えて

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-> the_link

は、それが動作するかどうか、私に教えてください$をエコー。 (私は、クエリをテストしていませんが、私はその権利を考えています。)

+0

今、すべての結果が表示されています... –

+0

申し訳ありません、元のwhereステートメントを追加するのを忘れてしまいました。 – SilicaGel

+0

これは、キーワードが両方に一致している場合に、望ましい結果を得られない場合があります。両方に一致する場合は2つのリンクを希望しましたか?この質問に答える前に上記のクエリがどのように機能するのか教えてください。私たちは改訂を行うことができます。 – SilicaGel

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