1

という名前のテーブルがnewsあり、これら 2 つのコード スニペットを使用して、テーブルをスキャンする検索エンジンを作成したいと考えていkeywordsます。1 つのテーブルが接続され、非常にうまく動作している場合は、クエリにテーブルを追加する方がクリーンです。

私の仕事は、テーブルから行を返す検索エンジンを作成することです。検索エンジンはキーワードに基づいており、「ニューヨーク タイムズ」などの特定の用語に適していますが、ニュースを入力したい場合は、すべてのニュース サイトが ID 順に並べられています。しかし、キーワード「ニュース」を持つまったく異なる用語が、ID のために CNN とは異なり、テーブルのかなり高い位置に表示されることがあります。新しいテーブルがあれば、テーブルの整理がずっと簡単になります。そうすれば、入力された用語が「ニュース」の場合、サイトは ID で並べ替えられ、他のテーブルと衝突しても ID で並べ替えられます。

私のクエリは従来のクエリとは少し異なりますが、方法がわかりません

  1. UNIONまたはを介してテーブルを追加します

  2. LEFT JOIN何らかのタグ付き。

私のクエリは以下のとおりです。誰かに説明してもらいたいです: a)単純に何が悪いのかb)教えていただくか、以下のコードを貼り付けてください:

<?php
if( isset($_GET['k']) ){
    $k = $_GET['k'];
}else{
    $k = '';
}
$k = ( isset($_GET['k']) )? trim($_GET['k']) : '';
$terms = (strlen($k) > 0)? explode(' ', $k) : Array();


/* The code below is from a different part of the script */

$query = " SELECT * FROM scan WHERE "; 

$terms = array_map('mysql_real_escape_string', $terms);
$i = 0; 
foreach ($terms as $each) {
    if ($i++ !== 0){
        $query .= " AND ";
    }
    $query .= "keywords LIKE '%{$each}%'";
}
4

2 に答える 2

2

あなたが何をしたいのか正確にはわかりませんが、これは役立つかもしれません:

$query = " SELECT * FROM scan, news WHERE scan.news_id = news.id AND ";

$terms = array_map('mysql_real_escape_string', $terms);

foreach ($terms as $each) {
  $query .= "AND scan.keywords LIKE '%{$each}%'";
}

クエリに条件を追加し、2 つのテーブルから選択することで、2 つのテーブル間のユニオンを作成します。条件は、2 つのテーブルの共通の列が等しいことを確認することです。

于 2012-08-08T19:14:43.040 に答える
0

左結合については、http://www.w3schools.com/sql/sql_join_left.aspを参照してください。

あなたが何を求めているのかよくわかりません。あなたの質問を明確にすることができれば、私はあなたに例を提供します. ありがとう。

于 2012-08-08T19:08:45.913 に答える