0

図書館システムの整頓と、乱雑な本のタイトルの修正を行っています。MySQL テーブルのデータに一致するキーワードを検索する SQL クエリまたは PHP コードを 1 文で記述したいと考えています。

[tbl_keywords]

id | keyword             | title
====================================================================
 1 | Harry Potter        | Harry Potter
 2 | Philosopher's Stone | [Harry Potter] Harry Potter and the Philosopher's Stone
 3 | Chamber of Secrets  | [Harry Potter] Harry Potter and the Chamber of Secrets
 4 | Dr. Seuss           | Dr. Seuss
 5 | Green Eggs and Ham  | [Dr. Seuss] Green Eggs and Ham
 6 | The Cat in the Hat  | [Dr. Seuss] The Cat in the Hat

例えば、

"Harry Potter(1)" => matches 1
"[Harry Potter] Harry Potter and the Philosopher's Stone(1)" => matches 1 and 2
"(HARRY POTTER2) THE CHAMBER OF SECRETS" => matches 1 and 3
"Dr. Seuss - Green Back Book" => matches 4
"Green eggs and ham" => matches 5
"the cat in the hat(Dr. Seuss)" => matches 4 and 6

また、これは可能ですか(実装が簡単ですか)?やることが多すぎる場合は、変数値をテーブルに追加するだけです..

"HarryPotter" => matches 1
"Dr.Seuss" => matches 4
"Dr Seuss" => matches 4

これを行う方法に関するヘルプやアイデアをいただければ幸いです。前もって感謝します。

4

3 に答える 3

0

SQL where 条件で LIKE を使用します。

例:

$input_search //your search input
$sql1 = 'Select * from `tbl_keywords` where keyword ="'.$input_search.'"';
//...the rest of code
$sql2 = 'Select * from `tbl_keywords` where keyword LIKE "%'.$input_search.'%" OR title LIKE "%'.$input_search.'%"';
//... the rest of code
//here is IF condition to get the desire result from the sql result you got
于 2012-09-05T06:10:47.653 に答える
0

SQL の代わりに、PHP の stristr を使用して、配列内の各キーワードを検索します。

テキストで検索し、php でキーワードを選択します

次に、MySQL テーブルで ID を検索して、他の情報/フィールドを取得します。タイトル、カテゴリーなど

$keywords = array(NULL, 'Harry Potter', 'Philosopher\'s Stone', 'Chamber of Secrets');
$input_title = "[Harry Potter] Harry Potter and the Philosopher\'s Stone(1)"

$keyword_found = array();
foreach ($keywords as $key => $val) {
    if (stristr($input_title, $val)) $keyword_found[] = $key;
}

if ($keyword_found) {
    foreach ($keyword_found as $val) {
        $sql = "SELECT * FROM `tbl_keywords` WHERE `id` = '" . $val . "'";
        ...
    }
}

それはきちんとしていませんし、もっと良い方法があるはずですが..少なくともうまくいきます! 私を助けようとする人々にもう一度感謝します:)

于 2012-09-05T11:52:56.470 に答える
0

Jstはこのように書きました

$element_to_search='//get here the input to search';
$sql2 = 'Select * from `tbl_keywords` where keyword LIKE "%'.$element_to_search.'%" OR title LIKE "%'.$element_to_search.'%"';

あなたの場合、検索されるkey_elementは常に2つの「%HERE%」の間に置かれます。

"HERE%" は、キーが and で始まる結果になります。

"%HERE" は、キーが次で終わる結果になります。

ただし、「%HERE%」を入力すると、「key_element」を部分文字列として含むすべての要素が返されます。ありがとう

于 2012-09-05T07:51:01.263 に答える