簡體   English   中英

PHP MySQL搜索兩列

[英]php MySQL Search on two columns

我正在嘗試使用php和MySQL做搜索功能。 我需要從兩個不同的列中進行搜索,一列用於歌曲標題,一列用於藝術家,用戶可以使用以下方法進行搜索:

1. artist name.
2. song title.
3. both of them (without order)
4. there will be special characters for ex: ' (apostrophe)

這是我所做的,但是我需要一種更有效的方法。 我也曾想過使用similar_text(); 在PHP中。 誰能建議我這樣做的更好方法。 謝謝

表: songs

|artist   |    title   |
|----------------------|
|eminem   | not afraid |
|kida     | o'najr     |

我的代碼:

$search_value = $_POST["search_value"];
$query = "select * from `songs` where concat(`title`, `artist`) like '%$search_value%'";

如果您不希望混淆,可以只使用sql或statement。

$search_value = $_POST["search_value"];//check user input first than create a query.
$query = "select * from `songs` where `title` like '%$search_value%' or  `artist` like '%$search_value%'";
  1. 在這種情況下,您應該使用SQL OR語句,它比CONCAT更好。

  2. 在搜索之前和之后加上空格,這應該為您提供預期的結果! (我的意思是,如果您搜索“突襲”,您將找不到“阿姆-不害怕”,如果要找到它,則必須搜索“害怕”;例如,如果您想通過啟示來對結果進行排序,必須創建索引並使用它們,或者使用Levenshtein方法或其他方法...)

  3. 在sql語句中使用數據之前,請不要忘記轉義數據。

順便說一句,如果您想使其變得不敏感,則必須使用blabla COLLATE UTF8_GENERAL_CI LIKE %what you search% blabla

// if you are using mysql_connect()
$search_value = ' '.mysql_real_escape_string($_POST["search_value"]).' ';
$query = "select * from `songs` where `title` like '%$search_value%' or  `artist` like '%$search_value%'";

// if you are using PDO
$args[':search_value'] = '% '.$_POST["search_value"].' %';

$query = "SELECT * FROM `songs` WHERE `title` LIKE :search_value OR `artist` LIKE :search_value";

$qry = $PDO->prepare($query);
$res = $qry->execute($args);

對於多詞搜索,您還可以使用

// for mysql_connect()
$search_value = $_POST["search_value"];
$search_value = explode(' ', $search_value);
foreach($search_value as $k => $v){
    $search_value[$k] = mysql_real_escape_string($v);
}
$search_value = ' '.implode(' % ', $search_value).' ';

// for PDO
$search_value = explode(' ', $_POST["search_value"]);
$search_value = implode(' % ', $search_value);
$args[':search_value'] = '% '.$search_value.' %';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM